【问题标题】:Extract column names of a dataset from a list of dataframes [duplicate]从数据框列表中提取数据集的列名[重复]
【发布时间】:2021-07-19 05:22:50
【问题描述】:

我有两个数据框列表,artrk_dist 和 comprk_dist。我正在使用 dplyr 在两个列表中加入相应的数据集。我需要使用列的索引而不是列名本身来引用联接调用中的列名。我尝试使用 colnames(dataset)[index],但这不起作用。 我有这个:

 allrk_dist<- inner_join(artrk_dist[[1]],comprk_dist[[1]], 
                                 by=c(colnames(artrk_dist[[1]])[1]= 
                                        colnames(comprk_dist[[1]])[1],
                                      colnames(artrk_dist[[1]])[2]= 
                                        colnames(comprk_dist[[1]])[2]))
    
    

但是这给出了一个错误:

Error: unexpected '=' in:
" allrk_dist[[1]]<- inner_join(artrk_dist[[1]],comprk_dist[[1]], 
                                 by=c(colnames(artrk_dist[[1]])[1]="
>                                         colnames(comprk_dist[[1]])[1],
Error: unexpected ',' in "                                        colnames(comprk_dist[[1]])[1],"
>                                       colnames(artrk_dist[[1]])[2]= 
+                                         colnames(comprk_dist[[1]])[2]))
Error: unexpected ')' in:
"                                      colnames(artrk_dist[[1]])[2]= 
                                        colnames(comprk_dist[[1]])[2])"
> 

这是我正在做的一个示例,它给出了上述错误:

data1<- data.frame(a1=1:5,b1=6:10)
 data2<- data.frame(a2=2:6,b2=5:9)
 data_list<-list(data1,data2)
 y<- inner_join(data_list[[1]],data_list[[2]],by=colnames(data_list[[1]])[1]
                = colnames(data_list[[2]])[1])

我需要使用索引来引用列名,但我被困在那里。

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
  • 现在加了个例子,不知道有没有用
  • 正如另一个问题中所指出的,使用inner_join(data_list[[1]],data_list[[2]],by=setNames(colnames(data_list[[2]])[1], colnames(data_list[[1]])[1]))
  • 如何添加另一个索引 - 我需要匹配两个索引 [1] 和 [2],它只是 SetNames 调用中的逗号分隔列表吗?
  • 你能不能让你的例子更好地代表你想要做的事情?明确要求的输出是什么。

标签: r list dplyr inner-join


【解决方案1】:

当我们传递一个对象时,使用setNames

inner_join(data_list[[1]],data_list[[2]],by=setNames(
            colnames(data_list[[2]])[1],colnames(data_list[[1]])[1]))

【讨论】:

  • 我实际上还有两个键可以加入——在这种情况下语法会如何变化?即,我有两个索引 [1] 和 [2] 我要加入。
  • @user2450223 这是基于您的示例,对我来说效果很好
  • 对不起,问题是我有两个键或索引要加入 - 我现在得到一个不同的错误:错误:suffix must be a character vector of length 2. suffix is a character vector of长度 1.
  • @user2450223 如果有两列,setNames(colnames(data_list[[2]])[1:2], colnames(data_list[[1]])[1:2])
  • @user2450223 使用c[c(1, 3, 5)] 作为索引
猜你喜欢
  • 2018-04-08
  • 2019-08-29
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
相关资源
最近更新 更多