【问题标题】:Manipulating certain vlaues within a data.frame or matrix在 data.frame 或矩阵中操作某些值
【发布时间】:2013-06-27 06:41:28
【问题描述】:

我在使用 R 时遇到了以下问题。

假设我在这个结构中有一个 data.frame(或矩阵):

t(data.frame(
"t1"=c(NA,NA,23,44),
"t2"=c(16,14,26,34),
"t3"=c(17,6,40,12),
"t4"=c(21,0.8,41,0.25),
"t5"=c(23,0.2,43,6)))

这导致以下data.frame:

   [,1] [,2] [,3]  [,4]
t1   NA   NA   23 44.00
t2   16 14.0   26 34.00
t3   17  6.0   40 12.00
t4   21  0.8   41  0.25
t5   23  0.2   43  6.00

我的目标是当出现“值小于 1” 时,将每列中的值替换为最后可用的“值大于 1”。即使值再次超过 1,这也应该持续。

查看所需的结构(第 2 列和第 3 列中的更改):

   [,1] [,2] [,3]  [,4]
t1   NA   NA   23 44.00
t2   16 14.0   26 34.00
t3   17  6.0   40 12.00
t4   21  6.0   41 12.00
t5   23  6.0   43 12.00

感谢您的帮助。

【问题讨论】:

  • 转置后没有data.frame,而是matrix。

标签: r dataframe data-manipulation


【解决方案1】:

试试这个:

new.df <- apply(old.df, 2,
                function (k) {
                  first <- which(k < 1)
                  if (length(first) == 0) return(k)
                  first <- first[[1]]
                  k[first:nrow(old.df)] <- k[[first - 1]]
                  k
               })

如果一列中的第一个值小于一个,这将打破的极端情况。但这是您问题中的一个极端案例,而不仅仅是这段代码。

【讨论】:

  • 你能给我一个提示吗,什么是解决方案,没有最后一个条件“即使值再次上升到 1 以上,这也应该持续。” an 将导致以下结果:因此,对于第 4 列,应提供以下值:44,34,12,12,6
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 2011-04-28
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多