R 基于另一列条件替换一列向量
嗨,我是R的初学者, 我有一个名为di_time的df,如下所示:R 基于另一列条件替换一列向量,r,R,嗨,我是R的初学者, 我有一个名为di_time的df,如下所示: A tibble: 3,037 x 4 Groups: id, trial [1,519] id trial first_block time <int> <int> <lgl> <dbl> 1 866093 1 FALSE 145. 2 866093 1 TRUE 114. 3 86609
A tibble: 3,037 x 4
Groups: id, trial [1,519]
id trial first_block time
<int> <int> <lgl> <dbl>
1 866093 1 FALSE 145.
2 866093 1 TRUE 114.
3 866093 2 FALSE 125.
4 866093 2 TRUE 60.4
5 866093 3 FALSE 107.
6 866093 3 TRUE 19.1
7 866093 4 FALSE 86.9
8 866093 4 TRUE 10.2
9 866093 5 FALSE 66.2
10 866093 5 TRUE 33.9
with 3,027 more rows
A tible:3037 x 4
组:id,试验[1519]
id第一次试块时间
1866093 1假145。
2866093 1真114。
3866093 2假125。
4866093 2真实的60.4
5866093 3假107。
6866093 3真实19.1
7866093 4假86.9
8866093 4真实的10.2
9866093 5假66.2
10866093 5真33.9
还有3027行
如果first_block==FALSE和first_block==TRUE保持不变,我想将所有的试验x替换为试验(x+6) 你可以这样做
df$trial1 <- df$trial + ((!df$first_block) * 6)
df
# id trial first_block time trial1
#1 866093 1 FALSE 145.0 7
#2 866093 1 TRUE 114.0 1
#3 866093 2 FALSE 125.0 8
#4 866093 2 TRUE 60.4 2
#5 866093 3 FALSE 107.0 9
#6 866093 3 TRUE 19.1 3
#7 866093 4 FALSE 86.9 10
#8 866093 4 TRUE 10.2 4
#9 866093 5 FALSE 66.2 11
#10 866093 5 TRUE 33.9 5
你可以
df$trial1 <- df$trial + ((!df$first_block) * 6)
df
# id trial first_block time trial1
#1 866093 1 FALSE 145.0 7
#2 866093 1 TRUE 114.0 1
#3 866093 2 FALSE 125.0 8
#4 866093 2 TRUE 60.4 2
#5 866093 3 FALSE 107.0 9
#6 866093 3 TRUE 19.1 3
#7 866093 4 FALSE 86.9 10
#8 866093 4 TRUE 10.2 4
#9 866093 5 FALSE 66.2 11
#10 866093 5 TRUE 33.9 5
基本R方法可以是
with(df, ave(trial, id, FUN = function(i)replace(i, first_block[1] == FALSE, i+6)))
#[1] 7 7 8 8 9 9 10 10 11 11
基本R方法可以是
with(df, ave(trial, id, FUN = function(i)replace(i, first_block[1] == FALSE, i+6)))
#[1] 7 7 8 8 9 9 10 10 11 11
下面是一个使用
base R
的解决方案,其中使用了in()
和ifelse()
:
df <- within(df,trial <- ifelse(!first_block, trial+6, trial))
数据
df <- structure(list(id = c(866093L, 866093L, 866093L, 866093L, 866093L,
866093L, 866093L, 866093L, 866093L, 866093L), trial = c(1L, 1L,
2L, 2L, 3L, 3L, 4L, 4L, 5L, 5L), first_block = c(FALSE, TRUE,
FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE), time = c(145,
114, 125, 60.4, 107, 19.1, 86.9, 10.2, 66.2, 33.9)), row.names = c(NA,
-10L), class = c("data.frame"))
df这是一个带有base R
的解决方案,其中in()
和ifelse()
用于:
df <- within(df,trial <- ifelse(!first_block, trial+6, trial))
数据
df <- structure(list(id = c(866093L, 866093L, 866093L, 866093L, 866093L,
866093L, 866093L, 866093L, 866093L, 866093L), trial = c(1L, 1L,
2L, 2L, 3L, 3L, 4L, 4L, 5L, 5L), first_block = c(FALSE, TRUE,
FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE), time = c(145,
114, 125, 60.4, 107, 19.1, 86.9, 10.2, 66.2, 33.9)), row.names = c(NA,
-10L), class = c("data.frame"))
df类似于带有(df,ave(试用,id,FUN=功能(i)替换(i,第一块[1]==FALSE,i+6))
?类似于带有(df,ave(试用,id,FUN=功能(i)替换(i,第一块[1]==FALSE,i+6))
?