【问题标题】:Assign value to a specific rows (R)为特定行赋值 (R)
【发布时间】:2021-12-20 07:41:33
【问题描述】:

我有 16k+ 个项目的 df。我想根据这些项目分配值 A、B 和 C。

示例: 我有以下 df 有 10 个独特的项目

df <- c(1:10)

现在我有三个单独的向量(A、B、C),其中包含具有值 A、B 或 C 的 df 的行号。

A <- c(3, 9)
B <- c(2, 6, 8)
C <- c(1, 4, 5, 7, 10)

现在我想向 df 添加一个新的类别列,并根据我拥有的三个向量中的行号分配值 A、B 和 C。例如,我想将值 C 分配给 df 的第 1、4、5、7 和 10 行。

我尝试使用 for 循环和 if 语句来将向量的值与 df 的行号相匹配,但我没有成功。有人可以帮忙吗?

【问题讨论】:

  • 你好@Jay。欢迎来到 SO!请提供minimal reproducible example。其他 SO 用户会更容易帮助您。先感谢您。干杯。
  • 现在好点了吗?
  • 感谢您改进您的问题。

标签: r row assign


【解决方案1】:

您可以遍历列表的名称并将这些名称分配给由连续数值集索引的位置:

dat <- list(A=A,B=B,C=C)
for(i in names(dat)){ df$new[ dat[[i]] ] <- i}

【讨论】:

    【解决方案2】:

    这是分配新列的一种方法。

    创建数据框和向量列表:

    df <- data.frame(n=1:10)
    dat <- list( A=c(3, 9), B=c(2, 6, 8), C=c(1, 4, 5, 7, 10) )
    

    将数据放在所需的行中:

    df$new[unlist(dat)] <- sub("[0-9].*$","",names(unlist(dat)))
    

    结果:

    df
        n new
    1   1   C
    2   2   B
    3   3   A
    4   4   C
    5   5   C
    6   6   B
    7   7   C
    8   8   B
    9   9   A
    10 10   C
    

    【讨论】:

    • 谢谢安德烈,当我尝试应用您的解决方案时,unlist 函数会产生类别名称(A、B、C)链接到数字的值,因此会产生 A1、B7 之类的值,直到 C1001。不过字母是对的!所以它部分工作
    • 好吧,我的错。忘了你有一个大数据集。我调整了替换。现在应该可以工作了!
    • 你是魔术师。我还不确定它是如何工作的,但它确实有效。非常感谢!
    猜你喜欢
    • 2013-05-06
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多