【问题标题】:Merging two columns by a rule in R [duplicate]通过R中的规则合并两列[重复]
【发布时间】:2020-11-01 21:08:37
【问题描述】:

我知道严格的编程问题在这个平台上是超出范围的,但我想知道你们中是否有人对我想做的事情有答案。我对 R 或编码完全陌生。

这是我的数据示例:

 X1  year individual partner 
  <dbl> <dbl> <chr> <chr>      
1     1  2015  A     B             
2     2  2015  A     B             
3     3  2015  B     A             
4     4  2015  C     A              
5     5  2015  C     D             
6     6  2015  D     C              

我想创建一个新列,它会给我 dyad 的 id。 二元组将是个人和合作伙伴的独特组合。 我可以将列合并在一起,但在这种情况下 A_B 和 B_A 将是两个不同的对 然而这两个实际上是同一对。

我想要实现的一个例子:

  X1  year individual partner dyad 
  <dbl> <dbl> <chr> <chr> <chr>
1     1  2015  A     B     A_B
2     2  2015  A     B     A_B
3     3  2015  B     A     A_B
4     4  2015  C     A     C_A
5     5  2015  C     D     C_D
6     6  2015  D     C     C_D

我有办法将两列合并在一起,但制定一个规则来将它们合并到新列中,这对我来说是合适的吗?

感谢您的帮助。

【问题讨论】:

  • 第四行不应该是A_C?
  • @Duck - 可以加入 A_C 或 C_A。但是,无论 A 是合作伙伴,C 是个人,还是 C 是合作伙伴,A 是个人,我都希望它是相同的。抱歉,不知道你说清楚了吗?

标签: r


【解决方案1】:

你可以试试这个:

#Data
df <- structure(list(X1 = 1:6, year = c(2015L, 2015L, 2015L, 2015L, 
2015L, 2015L), individual = c("A", "A", "B", "C", "C", "D"), 
    partner = c("B", "B", "A", "A", "D", "C")), row.names = c("1", 
"2", "3", "4", "5", "6"), class = "data.frame")

#Create index
df$id <- apply(df[,c(3:4)],1,function(x)paste(sort(x),collapse = "_"))

  X1 year individual partner  id
1  1 2015          A       B A_B
2  2 2015          A       B A_B
3  3 2015          B       A A_B
4  4 2015          C       A A_C
5  5 2015          C       D C_D
6  6 2015          D       C C_D

【讨论】:

  • 非常感谢您的完美运行!您能否向我解释一下该功能是如何工作的,以便我了解它的作用?如果你有时间!
  • @ValsRo 太棒了!当然,使用margin=1 在行级别计算一些函数。您必须选择要应用它的列df[,c(3:4)] 并定义函数。在您的情况下,function(x)paste(sort(x),collapse = "_") 获取第 3,4 列中的元素,并为每一行排序sort(),然后使用paste() 组合。参数collapse="_" 用于添加一个sep :)
  • 太棒了!再次感谢您的帮助和解释:)
猜你喜欢
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 2021-09-18
  • 2015-06-20
  • 1970-01-01
相关资源
最近更新 更多