【问题标题】:Repeat an action until condition is satisfied重复一个动作直到满足条件
【发布时间】:2014-05-03 01:38:41
【问题描述】:

我在 R 中有这张表。

它被称为d,结果是:

                  V1       V2       V3       V4         V5   V6           V7        V8
1    testtest_no_2nd  14.06863 11.50424 333173.1        0.0  0.00000      NaN       0.00
2    testtest1_no_2nd 14.50265 11.89501 387709.7    54536.6  0.43402 125654.6        NaN
3    testtest2        14.55234 11.95746 402124.0    14414.3  0.04969 290084.5  164429.95
4    testtest3        14.78606 12.14149 453059.3    50935.3  0.23372 217933.0  -72151.53
5    testtest4        15.16970 12.51004 496142.1    43082.8  0.38364 112300.1 -105632.92

我需要的是首先我需要将 Nan 值转换为 0,然后我需要删除 V8 向量的第一个元素并在末尾添加一个 0 值。我现在应该是

V8
0.00
164429.95
-72151.53
-105632.92

之后我需要删除 d 表中所有具有 V8 的行

有人帮我解决这个问题吗? 谢谢。

【问题讨论】:

  • remove row with nan value的可能重复
  • 你考虑过子集吗?然后做你想做的改变?
  • 我不会重复这个问题,首先,坦率地说,我是新手,不知道该用什么......
  • OP 不是要求删除所有包含 NaN 的案例,而是将它们转换为零。
  • 我只需要数据框保持原样,不删除任何内容,我只想更改 V8 列,以便我可以用它做进一步的事情..

标签: r


【解决方案1】:

使用矩阵更容易,但要使用您的 data.frame,请尝试以下操作:

d.new <- do.call(cbind.data.frame, lapply(d, function(x) {
  x[is.nan(x)] <- 0
  x
}))

d.new['V8'] <- c(d.new[-1, 'V8'], 0)

subset(d.new, V8 >= 0)

                V1       V2       V3       V4      V5      V6       V7     V8
1  testtest_no_2nd 14.06863 11.50424 333173.1     0.0 0.00000      0.0      0
2 testtest1_no_2nd 14.50265 11.89501 387709.7 54536.6 0.43402 125654.6 164430
5        testtest4 15.16970 12.51004 496142.1 43082.8 0.38364 112300.1      0

现在,如果d 是一个以 col 1 作为 row.names 的矩阵,那会简单一些:

m <- as.matrix(d[, -1])
row.names(m) <- d[, 1]
m[is.na(m)] <- 0
m[m[, 'V8'] >= 0, ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 2019-11-10
    • 2018-03-13
    • 2019-11-07
    • 2018-11-09
    相关资源
    最近更新 更多