【问题标题】:How to change a column inside a data.frame based on a index in R?如何根据 R 中的索引更改 data.frame 中的列?
【发布时间】:2015-11-17 18:23:18
【问题描述】:

我有一个包含两列的 data.frame:名称和索引以及 200 万行。

我确定所有索引都正确写入,但我需要验证“名称”列。

如何根据索引值更改所有名称值。

让我举个例子。假设我们有以下 data.frame 'db':

db
Index Name
1      Carlos
2      John
3      Bill
4      Mary
1      Cerlas

如图所示,“名称”对于每个索引值都应该相等,但有人写错了。

我将如何纠正它?是否有使用“dplyr”或“tidyr”的解决方案?

我尝试了以下代码,但没有成功。

for (i in unique(db$Index)) {
    db$Nome[db$Index==i] <- db$Nome[db$Index==i][1]
}

谢谢

【问题讨论】:

  • 我们如何知道哪个拼写正确?
  • @akrun 其实没关系
  • 在这种情况下,发布一个解决方案。

标签: r dplyr


【解决方案1】:

如果有人为每个“索引”的“名称”中的第一个元素正确命名,我们可以使用data.table 将“名称”分配为按“索引”分组的“名称”的第一个元素。

library(data.table)
setDT(db)[, Name:= Name[1L], by = Index]

【讨论】:

    【解决方案2】:

    你可以在 dplyr 中做到这一点。在这里,我们将每个索引的名字作为整个索引的名称:

    library(dplyr)
    dat %>% group_by(Index) %>%
            mutate(Name = Name[1])
    

    【讨论】:

    • 这就是我一直在寻找的答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-07-30
    • 2014-12-15
    • 1970-01-01
    • 2022-08-09
    • 2021-05-13
    • 2021-04-28
    • 1970-01-01
    • 2020-11-05
    相关资源
    最近更新 更多