R带有值的新列,有条件地从其他列复制

时间:2015-01-19 01:04:03

标签: r

我有三列数据,并希望创建一个新的第四列,其中包含第一列或第二列的值,具体取决于第三列中的内容。有任何想法吗?谢谢。

2 个答案:

答案 0 :(得分:3)

通过ifelse()轻松完成:

# generate example data
dat <- data.frame(x1= rnorm(100), x2= rnorm(100), x3= sample(c(1,2), 100, replace=TRUE))
# use x3 values to determine x4
dat$x4 <- ifelse(dat$x3 ==1, dat$x1, dat$x2)

答案 1 :(得分:0)

使用@Alex的数据,假设column3值表示前两列的列号或列名,可以使用“行/列”索引来获取元素的位置并使用{{1} }对值进行子集化。例如,在下面,“dat $ x3”是数字“1,2”值。通过使用[,我们提供有关“dat”中值的位置的信息。

cbind(seq_len(nrow(dat)...)

但是,如果“x3”是其他值,例如“xyz”,“uvw”,并且想要选择“x1”值,如果“xyz”和“x2”代表“uvw”

dat$x4 <- dat[cbind(seq_len(nrow(dat)), dat$x3)]

或者

indx <- cbind(seq_len(nrow(dat1)), setNames(1:2,
           c('xyz', 'uvw'))[as.character(dat1$x3)])
dat1$x4 <- dat1[-3][indx]

数据

dat1$x4 <- dat1$x2
dat1$x4[dat1$x3=='xyz'] <- dat1$x1[dat1$x3=='xyz']