Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用函数在DataFrame中使用多列获取逗号分隔的字符串并创建第三列_R - Fatal编程技术网

应用函数在DataFrame中使用多列获取逗号分隔的字符串并创建第三列

应用函数在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 到目前为止

我正在尝试对一行中的名称进行排序,并创建一个逗号分隔的字符串,该字符串将创建另一列

这是我的示例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
到目前为止,我已经尝试过:

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的答案是这样的