繁体   English   中英

R:如何仅将新的列添加到现有的数据框中的行的子集和有条件

[英]R: How to add a new column to an existing dataframe ONLY for a subset of rows and with a condition

我想基于另一列中的值添加一个新列,称为“ real_rt”。

数据框中感兴趣的列是:

  • trial_type:值'go'和'nogo'
  • StimOnset:数值
  • RT:数值

仅当RT> 0(否则应保持为0)时,“ Real_rt”才应基于StimOnset减去RT。 但是,此计算仅应针对执行试验(列“ trail_type”)进行。

我知道如何添加新列以及如何进行for循环和if-statemanet(因为我想这是我在这里所需要的),但是我不知道如何将这3个结合起来才能得到想。 任何想法将不胜感激。

这可能会引导您朝正确的方向前进。

df <- data.frame(X = c(1, 0, 2, 4),
                 Y = c(2, -1, 0, 5))

df$Z <- ifelse(df$Y > 0, df$X - df$Y, 0)
df
#  X  Y  Z
#1 1  2 -1
#2 0 -1  0
#3 2  0  0
#4 4  5 -1

我喜欢从tidyverse包中将mutate与case_when结合使用来进行这种事情:

require(tidyverse)

df <- data.frame(StimOnset = c(1, 0, 2, 4),
                 RT = c(2, -1, 0, 5),
                 trial_type = c("go", "nogo", "go", "nogo"))

df <- df %>% 
  mutate(
   Real_rt = case_when(
     trial_type == "go" & RT > 0 ~ StimOnset - RT,
     TRUE ~ 0
    )
  )
df
StimOnset RT trial_type Real_rt
1         1  2         go      -1
2         0 -1       nogo       0
3         2  0         go       0
4         4  5       nogo       0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM