向 Dataframe 添加新的条件列

e5njpo68  于 2022-12-30  发布在  其他
关注(0)|答案(2)|浏览(103)

我想知道以下在R中是否可能?
我想在Data中添加一个名为task的新列,其值将由以下语句确定:

  • 如果order"sc",则对于具有奇数的time值(* 1,3,...*)的行的task值是"simple",否则是"complex"
  • 如果order"cs",则对于具有奇数的time值(* 1,3,...*)的行的task值是"complex",否则是"simple"
Data = read.table(text="
id order  time task
1  sc     1    x
1  sc     2    x
2  cs     1    x
2  cs     2    x
3  sc     1    x
3  sc     2    x
4  cs     1    x
4  cs     2    x
", h= TRUE)
ee7vknir

ee7vknir1#

您可以使用ifelsetime %% 2来确定奇数或偶数。

Data |>
  transform(task = ifelse(order == 'sc' & time %% 2 == 1 |
                          order == 'cs' & time %% 2 == 0,
                          'simple', 'complex'))

  id order time    task
1  1    sc    1  simple
2  1    sc    2 complex
3  2    cs    1 complex
4  2    cs    2  simple
5  3    sc    1  simple
6  3    sc    2 complex
7  4    cs    1 complex
8  4    cs    2  simple
wvyml7n5

wvyml7n52#

Darren Tsai的另一个答案很棒!我不确定ifelse()的速度是什么样的,我没有太多的使用经验,但这里有一个替代选项:
它所做的只是获取与"simple"用例的条件匹配的行号(通过which()),然后再次获取与"complex"用例的条件匹配的行号。

index.simple <- which( (Data$order=="sc" & Data$time%%2==1) | (Data$order=="cs" & Data$time%%2==0) )
Data$task[index.simple]  <- "simple" 

index.complex <- which( (Data$order=="sc" & Data$time%%2==0) | (Data$order=="cs" & Data$time%%2==1) )                     
Data$task[index.complex]  <- "complex"

相关问题