根据从其他列中选择的值在R Dataframe 中创建新列

yhuiod9q  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(141)

我有一个 Dataframe 如下:

data <- data.table (x= c(1,2,3,4,5), y= c(7,6,8,9,10), z= c('a','b','c','d','e'), w=c(01.05, 03.04, 11.08, 05.07, 09.18))

我需要创建一个包含值的新列,如下所述:每当x等于3或5,或y等于7时,创建一个新的列M,将w中相应行的值插入到列M中,并将其他行留空。数据应如下所示:

data <- data.table (x= c(1,2,3,4,5), y= c(7, 6,8,9,10), z= c('a','b','c','d','e'), w=c(01.05, 03.04, 11.08, 05.07, 09,18), M=c(01.05, NA, 11.08, NA, 09.18)

我是一个初学者在R和搜索了很多,但没有找到一个解决方案。我尝试使用case_when和应用函数,但没有运气。我将非常感谢,如果有人可以帮助我这一点。

qmb5sa22

qmb5sa221#

当你使用data.table时,这是给:=赋一个新变量的方法。你可以使用ifelse或更好的fifelse(以确保Mw是同一个类)来检查你的条件,使用%in%|

library(data.table)
data <- data.table (x = c(1:5), y = c(7,6,8,9,10), z = letters[1:5], 
                    w = c(01.05, 03.04, 11.08, 05.07, 09.18))

data[, M := fifelse(x %in% c(3,5) | y == 7, w, NA_real_)]
data
#>    x  y z     w     M
#> 1: 1  7 a  1.05  1.05
#> 2: 2  6 b  3.04    NA
#> 3: 3  8 c 11.08 11.08
#> 4: 4  9 d  5.07    NA
#> 5: 5 10 e  9.18  9.18

Edit:r2evans的方法在下面的注解中,这个答案做了同样的事情,但更优雅:

data[x %in% c(3,5) | y == 7, M := w]

相关问题