应用函数在DataFrame中使用多列获取逗号分隔的字符串并创建第三列
我正在尝试对一行中的名称进行排序,并创建一个逗号分隔的字符串,该字符串将创建另一列 这是我的示例data.frame应用函数在DataFrame中使用多列获取逗号分隔的字符串并创建第三列,r,R,我正在尝试对一行中的名称进行排序,并创建一个逗号分隔的字符串,该字符串将创建另一列 这是我的示例data.frame df=data.frame(A=c("A","K","B","D","F"),B =c("E","C","D","A","K")) A B 1 A E 2 K C 3 B D 4 D A 5 F K 我想要得到的输出是这样的 A B C 1 A E A , E 2 K C C , K 3 B D B , D 4 D A A , D 5 F K F , K 到目前为止
df=data.frame(A=c("A","K","B","D","F"),B =c("E","C","D","A","K"))
A B
1 A E
2 K C
3 B D
4 D A
5 F K
我想要得到的输出是这样的
A B C
1 A E A , E
2 K C C , K
3 B D B , D
4 D A A , D
5 F K F , K
到目前为止,我已经尝试过:
lapply(df,FUN=paste(sort(df$A,df$B),collapse=" , "))
mapply(FUN= function(x,y)paste(sort(x,y),collapse=" , "),df$A,df$B)
在这里,我尝试对列值进行排序,并使用“”、“
粘贴它们,以创建唯一的对名称
感谢您的帮助。试试这个
> for( i in 1:nrow(df)){
+ df$C[i]<-paste0(as.character(unlist(sort(df[i,1:2]))),collapse=" , ")
+ }
> df
> df
A B C
1 A E A , E
2 K C C , K
3 B D B , D
4 D A A , D
5 F K F , K
>用于(1中的i:nrow(df)){
+df$C[i]df
>df
A、B、C
1 A E A,E
2KCC,K
3b,D,D
4d A,D
5f,kf,K
试试这个
> for( i in 1:nrow(df)){
+ df$C[i]<-paste0(as.character(unlist(sort(df[i,1:2]))),collapse=" , ")
+ }
> df
> df
A B C
1 A E A , E
2 K C C , K
3 B D B , D
4 D A A , D
5 F K F , K
>用于(1中的i:nrow(df)){
+df$C[i]df
>df
A、B、C
1 A E A,E
2KCC,K
3b,D,D
4d A,D
5f,kf,K
您可以使用mapply
进行操作,但由于您的数据是因子,因此需要强制字符以正确排序:
df$C <- mapply(function(x, y){paste(sort(c(as.character(x), as.character(y))),
collapse = ',')}, df$A, df$B)
df
# A B C
# 1 A E A,E
# 2 K C C,K
# 3 B D B,D
# 4 D A A,D
# 5 F K F,K
由于它将df
视为一个矩阵,因此它将所有内容都转换为字符,这恰好是示例数据所需要的
另请参见
tidyr::unite
,了解如何将两列粘贴在一起,尽管它无法轻松排序。您可以使用mapply
进行排序,但由于您的数据是因子,您需要强制字符以正确排序:
df$C <- mapply(function(x, y){paste(sort(c(as.character(x), as.character(y))),
collapse = ',')}, df$A, df$B)
df
# A B C
# 1 A E A,E
# 2 K C C,K
# 3 B D B,D
# 4 D A A,D
# 5 F K F,K
由于它将df
视为一个矩阵,因此它将所有内容都转换为字符,这恰好是示例数据所需要的
另请参见
tidyr::unite
,了解如何将两列粘贴在一起,尽管这很难排序。如果只有两列,可以使用pmax
和pmin
来避免任何昂贵的循环代码。例如:
with(lapply(df, as.character), paste(pmin(A,B),pmax(A,B),sep=",") )
#[1] "A,E" "C,K" "B,D" "A,D" "F,K"
如果您只有两列,则可以使用
pmax
和pmin
来避免任何昂贵的循环代码。例如:
with(lapply(df, as.character), paste(pmin(A,B),pmax(A,B),sep=",") )
#[1] "A,E" "C,K" "B,D" "A,D" "F,K"
我相信@alistaire的答案是这样的我相信@alistaire的答案是这样的