我有三列数据,并希望创建一个新的第四列,其中包含第一列或第二列的值,具体取决于第三列中的内容。有任何想法吗?谢谢。
答案 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']