【发布时间】:2015-10-18 10:46:45
【问题描述】:
我有一个 data.frame df,其中 x 列填充了整数 (1-9)。我想根据 x 的值更新列 y 和 z,如下所示:
if x is 1,2, or 3 | y = 1 ## if x is 1,4, or 7 | z = 1
if x is 4,5, or 6 | y = 2 ## if x is 2,5, or 8 | z = 2
if x is 7,8, or 9 | y = 3 ## if x is 3,6, or 9 | z = 3
下面是带有y 和z 所需输出的data.frame
df <- structure(list(x = c(1L, 2L, 3L, 3L, 4L, 2L, 1L, 2L, 5L, 2L,
1L, 6L, 3L, 7L, 3L, 2L, 1L, 4L, 3L, 2L), y = c(1L, 1L, 1L, 1L,
2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 3L, 1L, 1L, 1L, 2L, 1L, 1L
), z = c(1L, 2L, 3L, 3L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 3L, 3L,
1L, 3L, 2L, 1L, 1L, 3L, 2L)), .Names = c("x", "y", "z"), class = "data.frame", row.names = c(NA,
-20L))
我可以编写一个带有多个 if 语句的 for 循环来逐行填充 y 和 z。这似乎不是很 r:它不是矢量化的。有没有一种方法可以指定哪些数值对应于新的数值?像地图或键一样,指示哪些值将基于以前的值。
【问题讨论】:
-
您想要的输出与
df$y[12](规则为 2,值为 3)和df$z[16](规则为 2,值为 3)的规则不匹配。 -
是的,这是一个错误。
标签: r dictionary dataframe