【问题标题】:R Extract ValuesR提取值
【发布时间】:2014-07-23 17:44:19
【问题描述】:

我目前有这样一个数据框(有 60 列值),想按照以下规则提取值。

  1. 比较 a1,b1,c1,d1。找出 4 个数字中的最大值。
  2. 如果a1为最大值,则取a6的值。同样,如果 b1 为最大值,则获取 b6 的值。如果 c1 是最大值,则获取 c6 的值。如果 d1 是最大值,则获取 d6 的值。 (我们需要在这个阶段提取价值)
  3. 比较 a2,b2,c2,d2。找出 4 个数字中的最大值。
  4. 如果a2为最大值,则取a7的值。同样,如果 b2 为最大值,则获取 b7 的值。如果 c2 是最大值,则获取 c7 的值。如果d2为最大值,则取d7的值,
  5. 我们执行上述步骤,直到我们比较 a5,b5,c5,d5 并得到 4 个值中的最大值。然后找到其对应的单元格a10、b10、c10或d10。

非常感谢!

a1    1          
a2    3
a3    4
a4    2
a5    3
a6    9
a7    2
a8    3
a9    4
a10   7 
b1    2
b2    4
b3    5
b4    8
b5    6
b6    5
b7    3
b8    2
b9    1
b10   8
c1    5
c2    11
c3    21
c4    14
c5    2
c6    0
c7    1
c8    16
c9    12
c10   16
d1    21
d2    22
d3    31
d4    33
d5    30
d6    24
d7    23
d8    25
d9    26
d10   27

【问题讨论】:

  • 纯代码编写请求在 Stack Overflow 上被认为是题外话。这里的问题应该与特定编程问题有关。请提供minimal reproducible example 向我们展示the code you have tried,您在哪里卡住,以及预期的输出。这也将有助于我们更好地回答您的问题。
  • 我不知道如何编写代码.....对不起,我有很多关于 R 的知识。我不知道从哪里开始编写代码......
  • 是您的原始数据还是您在操作后结束了这里?也许,较早的步骤需要一个比这里可以尝试的更干净的解决方案?
  • 这是我的原始数据。实际上我有 60 列值,需要为每列提取 5 个值。我在这里只展示 1 列数据。非常感谢您的帮助!

标签: r indexing extract


【解决方案1】:

使用dat 作为示例中显示的数据集。 (会有更简单的方法...)

indx <- as.numeric(gsub("[[:alpha:]]","",dat$V1)) #V1 is the first column
l <- split(dat, indx)
l1 <- l[1:5]
l2 <- l[6:10]
indx2 <- sapply(l1, function(x) which.max(x$V2)) #V2 is the second column
sapply(seq_along(indx2), function(i) {x1 <- l2[[i]][2][indx2[i],]})
#[1] 24 23 25 26 27

更新

如果您有更多列

dat1 <- dat
 set.seed(42)
dat1$V3 <- sample(1:25, 40,replace=TRUE)
indx <- as.numeric(gsub("[[:alpha:]]","",dat1$V1))
l <- split(dat1[,-1], indx)
l1 <- l[1:5]
l2 <- l[6:10]

indx2 <- lapply(l1, function(x) apply(x,2, function(y) y ==max(y)))

 t(sapply(seq_along(l2),function(i) {x1 <- l2[[i]]; x2<- indx2[[i]]; unique(x1[x2])}))
 #        [,1] [,2]
 #   [1,]   24   13
 #   [2,]   23   19
 #   [3,]   25   23
 #   [4,]   26   12
 #   [5,]   27   18

【讨论】:

  • 非常感谢!我只是想知道它是如何处理 60 列数据的。我应该使用相同的代码吗?
  • @user3869846。没问题。是的,您可以使用相同的代码。如果您遇到任何错误,请告诉我。顺便说一句,你有缺失值吗?
  • 谢谢!没有缺失值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 2017-10-14
  • 2023-03-26
  • 2023-02-23
  • 2020-02-06
  • 2015-10-12
相关资源
最近更新 更多