【问题标题】:Subsetting with for function in R在R中使用for函数进行子集化
【发布时间】:2020-07-05 10:56:17
【问题描述】:

尝试使用函数来获取多个不同列子集的平均值并将它们添加为新列。 DMcomponents 定义了一个字符向量。此向量中的每个条目都由其自己的带有列名的字符向量定义。

for (i in DMcomponents){
  DMData["i"] <- rowMeans(DMData[c(i)])
}

在我看来,这应该可行,但我收到此错误:

Error in `[.data.frame`(DMData, c(i)) : undefined columns selected

我猜这与如何将向量“粘贴”到子集参数中有关?谢谢

id <- c(1, 2, 3)
a <- c(4, 4, 4)
b <- c(6, 6, 6)
c <- c(8, 8, 8)
d <- c(10, 10, 10)

abcd <- data.frame(id, a, b, c, d)


DMcomponents <- c("ab", "cd")

ab <- c("a", "b")
cd <- c("c", "d")

ab <- c(5, 5, 5)
cd <- c(9, 9, 9)

想要的结果:

abcd_end <- data.frame(id, a, b, c, d, ab, cd)

【问题讨论】:

  • 如果您能向我们展示一些DMcomponentsDMData 的样本以及您用于创建它们的可能的包,那将会更容易提供帮助?

标签: r for-loop subset


【解决方案1】:

我们不需要报价

lst1 <- mget(DMcomponents)

 for (nm in names(lst1)){
    abcd[nm] <- rowMeans(abcd[lst1[[nm]]])
  }

abcd
#  id a b c  d ab cd
#1  1 4 6 8 10  5  9
#2  2 4 6 8 10  5  9
#3  3 4 6 8 10  5  9

数据

id <- c(1, 2, 3)
a <- c(4, 4, 4)
b <- c(6, 6, 6)
c <- c(8, 8, 8)
d <- c(10, 10, 10)

abcd <- data.frame(id, a, b, c, d)
DMcomponents <- c("ab", "cd")
ab <- c("a", "b")
cd <- c("c", "d")

【讨论】:

  • 我想创建一个新列,其中包含 DMcomponents 中每个条目的名称,数据是 DMcomponents 中每个条目的单独向量指定的列的平均值。 (例如 DMcomponents = c("ab", "cd"), ab = c("a", "b"), dc = c("c", "d"),其中结果是列 ab 和 dc分别为 a,b 和 c,d 的平均值)
  • @TiberiusGracchus2020 如果你想创建列使用的方法colMeansmean(DMData[[i]])
  • 指定列的行数*
  • @TiberiusGracchus2020 这是list orr 向量(DMComponents)
  • 发现问题了!一个向量命名错误!
猜你喜欢
  • 2015-12-28
  • 2015-06-20
  • 1970-01-01
  • 2019-09-26
  • 2018-06-21
  • 1970-01-01
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多