如何从包含字符的列创建列分组信息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从包含字符的列创建列分组信息相关的知识,希望对你有一定的参考价值。
我在这个组织的数据库中有一个列:
例:
Location
A_1
A_1
A_2
A_3
A_3
B_1
B_2
我想用第一部分(“A”)将它们分组,使用R;也就是说,我想基于这个字母创建一个新列,所以数据库看起来像这样:
Location Location_1
A_1 A
A_1 A
A_2 A
A_3 A
A_3 A
B_1 B
B_2 B
我已经尝试了mutate()
和ifelse()
函数在这里的另一篇文章(Create column with grouped values based on another column),但我收到此错误:
“UseMethod中的错误(”mutate_“):没有适用于'mutate_'的方法应用于类”character“的对象
有人知道如何解决这个问题或其他方法吗?
这是我正在使用的.csv文件的一部分:
Location Species Time
A_1 FC 0.52
A_1 JC 0.64
A_2 JC 0.31
A_2 FC 0.02
A_2 FC 0.01
A_3 FC 0.13
A_3 JC 0.97
A_3 OT 0.86
A_3 JC 0.55
B_1 JC 0.32
B_1 OT 0.04
B_1 OT 0.06
B_2 OT 0.12
B_2 JC 0.13
B_2 JC 0.14
B_2 OT 0.56
C_1 OT 0.57
C_1 OT 0.86
C_1 FC 0.58
C_1 FC 0.76
... ... ...
答案
有一种简单的方法可以使用gsub
或sub
在_
之前获取文本。它可以实现为:
#data
df <- data.frame(Location=c("A_1","A_1","A_2","A_3","A_3","B_1","B_2"),
State=c("S_1","S_1","S_2","T_3","T_3","T_1","T_2"),
City=c("X_1","X_1","X_2","X_3","X_3","Y_1","Y_2"),
stringsAsFactors = FALSE)
# single column
df$Location_1 <- gsub("_.*", "", df$Location, perl = TRUE)
df
# Location Location_1
#1 A_1 A
#2 A_1 A
#3 A_2 A
#4 A_3 A
#5 A_3 A
#6 B_1 B
#7 B_2 B
# using mutate_at for multiple columns. Its applying on all columns
library(dplyr)
df %>% mutate_at(names(df), .funs = funs(new = gsub("_.*", "", ., perl = TRUE)))
#Result
#Location State City Location_new State_new City_new
#1 A_1 S_1 X_1 A S X
#2 A_1 S_1 X_1 A S X
#3 A_2 S_2 X_2 A S X
#4 A_3 T_3 X_3 A T X
#5 A_3 T_3 X_3 A T X
#6 B_1 T_1 Y_1 B T Y
#7 B_2 T_2 Y_2 B T Y
选项3
从csv文件中读取:
df <- read.table("d:/Files/data.csv", header = TRUE, stringsAsFactors = FALSE)
df$Location_1 <- gsub("_.*", "", df$Location, perl = TRUE)
另一答案
您可以使用strsplit
将第一列拆分为“_”。这应该做你想要的:
dat <- data.frame(Location=c("A_1","A_1","A_2","A_3","A_3","B_1","B_2"),
stringsAsFactors = FALSE)
dat$Location1 <- sapply(strsplit(dat$Location, "_"), "[[", 1)
dat
> dat
Location Location1
1 A_1 A
2 A_1 A
3 A_2 A
4 A_3 A
5 A_3 A
6 B_1 B
7 B_2 B
以上是关于如何从包含字符的列创建列分组信息的主要内容,如果未能解决你的问题,请参考以下文章
如何从 PySpark DataFrame 的列中分离特定字符并使用它们形成一个新列?