R 基于两列中的值组合的列
我有一个dataframe,我想在其中基于另外两列的值创建一个新列。虚拟数据帧R 基于两列中的值组合的列,r,dataframe,R,Dataframe,我有一个dataframe,我想在其中基于另外两列的值创建一个新列。虚拟数据帧 freqg <- data.frame(mat=c(1,2),flank=c(1,2,3,4)) fregg您可能更喜欢与dplyr等效的版本 freqg %>% mutate(condition = case_when( mat %in% 1 & flank %in% 1 ~ "LK", mat %in% 1 & flank %in% 2 ~ "FQ")) 您可能
freqg <- data.frame(mat=c(1,2),flank=c(1,2,3,4))
fregg您可能更喜欢与dplyr等效的版本
freqg %>%
mutate(condition = case_when(
mat %in% 1 & flank %in% 1 ~ "LK",
mat %in% 1 & flank %in% 2 ~ "FQ"))
您可能更喜欢与dplyr等效的版本
freqg %>%
mutate(condition = case_when(
mat %in% 1 & flank %in% 1 ~ "LK",
mat %in% 1 & flank %in% 2 ~ "FQ"))
在原始数据帧上创建组合条件数据帧(comb_df
)和left_join
,使用dplyr或merge
从基本R开始
使用expand.grid
创建所需的组合。比如:
comb_df <- data.frame(expand.grid(mat = 1:2, flank = 1:2),
condition = c("LK", NA, "FQ", NA)
comb_df
# mat flank condition
#1 1 1 LK
#2 2 1 <NA>
#3 1 2 FQ
#4 2 2 <NA>
freqg %>% dplyr::left_join(comb_df) # OR merge(freqg, comb_df, all.x= T)
# mat flank condition
#1 1 1 LK
#2 2 2 <NA>
#3 1 3 <NA>
#4 2 4 <NA>
comb_-df%dplyr::left_-join(comb_-df)#或merge(fregg,comb_-df,all.x=T)
#垫面条件
#1LK
#2 2 2
#3 1 3
#4 2 4
使用dplyr或从基R合并在原始数据帧上创建一个组合条件数据帧(comb_df
)和左连接
使用expand.grid
创建所需的组合。比如:
comb_df <- data.frame(expand.grid(mat = 1:2, flank = 1:2),
condition = c("LK", NA, "FQ", NA)
comb_df
# mat flank condition
#1 1 1 LK
#2 2 1 <NA>
#3 1 2 FQ
#4 2 2 <NA>
freqg %>% dplyr::left_join(comb_df) # OR merge(freqg, comb_df, all.x= T)
# mat flank condition
#1 1 1 LK
#2 2 2 <NA>
#3 1 3 <NA>
#4 2 4 <NA>
comb_-df%dplyr::left_-join(comb_-df)#或merge(fregg,comb_-df,all.x=T)
#垫面条件
#1LK
#2 2 2
#3 1 3
#4 2 4
您可以对所有组合使用expand.grid
,然后创建另一列,我称之为cc
,然后使用merge
将此数据帧与我称之为cond\u df
> freqg=expand.grid(mat=c(1,2),flank=c(1,2,3,4))
> freqg
mat flank
1 1 1
2 2 1
3 1 2
4 2 2
5 1 3
6 2 3
7 1 4
8 2 4
> cond_df=data.frame(cc=c(11,12),condition=c("LK","FQ"))
> cond_df
cc condition
1 11 LK
2 12 FQ
> merge(cbind(freqg,cc=do.call(paste0,freqg)),cond_df,all=T)
cc mat flank condition
1 11 1 1 LK
2 12 1 2 FQ
3 13 1 3 <NA>
4 14 1 4 <NA>
5 21 2 1 <NA>
6 22 2 2 <NA>
7 23 2 3 <NA>
8 24 2 4 <NA>
fregg=expand.grid(mat=c(1,2),侧翼=c(1,2,3,4))
>频率
垫翼
1 1 1
2 2 1
3 1 2
4 2 2
5 1 3
6 2 3
7 1 4
8 2 4
>cond_df=data.frame(cc=c(11,12),condition=c(“LK”,“FQ”))
>cond_df
cc条件
111LK
2 12 FQ
>合并(cbind(freqg,cc=do.call(paste0,freqg)),cond_df,all=T)
cc垫侧面条件
1111LK
2 12 1 2 FQ
3 13 1 3
4 14 1 4
5 21 2 1
6 22 2 2
7 23 2 3
8 24 2 4
您可以对所有组合使用expand.grid
,然后创建另一列,我称之为cc
,然后使用merge
将此数据帧与我称之为cond\u df
> freqg=expand.grid(mat=c(1,2),flank=c(1,2,3,4))
> freqg
mat flank
1 1 1
2 2 1
3 1 2
4 2 2
5 1 3
6 2 3
7 1 4
8 2 4
> cond_df=data.frame(cc=c(11,12),condition=c("LK","FQ"))
> cond_df
cc condition
1 11 LK
2 12 FQ
> merge(cbind(freqg,cc=do.call(paste0,freqg)),cond_df,all=T)
cc mat flank condition
1 11 1 1 LK
2 12 1 2 FQ
3 13 1 3 <NA>
4 14 1 4 <NA>
5 21 2 1 <NA>
6 22 2 2 <NA>
7 23 2 3 <NA>
8 24 2 4 <NA>
fregg=expand.grid(mat=c(1,2),侧翼=c(1,2,3,4))
>频率
垫翼
1 1 1
2 2 1
3 1 2
4 2 2
5 1 3
6 2 3
7 1 4
8 2 4
>cond_df=data.frame(cc=c(11,12),condition=c(“LK”,“FQ”))
>cond_df
cc条件
111LK
2 12 FQ
>合并(cbind(freqg,cc=do.call(paste0,freqg)),cond_df,all=T)
cc垫侧面条件
1111LK
2 12 1 2 FQ
3 13 1 3
4 14 1 4
5 21 2 1
6 22 2 2
7 23 2 3
8 24 2 4