如果我的数据框包含以下具有以下元素的列
w x y z
0 0 1 2
0 0 3 4
0 0 5 6
如何在不直接调用列的情况下更改非零列的值?
例如,如果我想通过乘以10来更新非零值
w x y z
0 0 10 20
0 0 30 40
0 0 50 60
答案 0 :(得分:2)
您可以使用[
对所需数据框的一部分进行子集化,并以相同的方式计算替换值:
> df <- data.frame(w = c(0,0,0), x = c(0,0,0), y = c(1,3,5), z = c(2,4,6))
> df[df != 0] <- df[df != 0] * 10
> df
w x y z
1 0 0 10 20
2 0 0 30 40
3 0 0 50 60
虽然如果你实际上只是乘以10,你可以df <- df * 10
得到相同的结果。
答案 1 :(得分:2)
在你的例子中,你可以简单地乘以10:)
plouf
w x y z
1 0 0 1 2
2 0 0 3 4
3 0 0 5 6
plouf*10
w x y z
1 0 0 10 20
2 0 0 30 40
3 0 0 50 60
答案 2 :(得分:1)
将每个单元格乘以10(0仍然是0;然后是 - )
df <- read.table(text =
"w x y z
0 0 1 2
0 0 3 4
0 0 5 6", sep = " ", header = T)
df
df = df * 10
结果:
w x y z
1 0 0 10 20
2 0 0 30 40
3 0 0 50 60
广义解决方案:要忽略任何选择值(甚至是更复杂的过滤器表达式),您只能选择没有此值的单元格并更新它们:
df[df != 1] <- df[df != 1] * 10
结果:
w x y z
1 0 0 1 20
2 0 0 30 40
3 0 0 50 60
注意:如果您不使用,
的方括号中的data.frame
,则表达式将应用于符合此条件的所有单元格...