【问题标题】:Check if value exists in dataframe (of different length) and replace检查数据帧(不同长度)中是否存在值并替换
【发布时间】:2012-11-26 11:27:39
【问题描述】:

编辑

我有两个不同长度的数据框:

kframe <- data.frame(One=c("NO123","NO234", "NO345", "NO432"),Two=c("NAME1","NAME2","NAME3","NAME4"), Three=c(1,2,3,4))
lframe <- data.frame(One=c("NO123","NO587", "NO345"),Two=c("N1","N2","N2"), Three=c(2,3,4))

想检查lframe$One[x] 中的值(与x=1:nrow(lframe))是否存在于kframe$One 中,如果为真则替换lframe$Two[x] 中的值,否则什么也不做..

如何做到这一点?

编辑:

或者,换一种说法:如果为真,则将值添加到 $Three...

预期结果:

lframe:

  One   Two  Three
1 NO123 NAME1 3
2 NO587 N2    3
3 NO345 NAME3 7

【问题讨论】:

  • 您能否发布一个示例,说明您希望看到的这两个小data.frames 的输出?
  • 不清楚你想要什么。您对以下答案的评论使其更加不清楚。
  • 抱歉,R 和 stackoverflow 都是新手
  • @Fred 当 lframe$One 与 kframe$One 匹配时,你想用 kframe$Two 替换 lframe$Two 吗?
  • @agstudy: 是(从 1 到 nrow(lframe) 的循环示例:lframe$One[1] 匹配 kframe$One 中的任何值,在本例中为 kframe$One[1],然后 lframe$Two[1]

标签: r function compare dataframe subset


【解决方案1】:

你可以做一个简单的 for 循环:

for (i in 1:nrow(kframe)) {
   if (lframe$One[i] == kframe$One[i]) {
      lframe$Two[i] <- kframe$Two[i]
   }
}

【讨论】:

  • 这是低效的,它也不适用于不同级别的因子列
猜你喜欢
  • 2013-05-17
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多