我有一个数据框,我想根据其他两个列的值创建一个新列。虚拟数据框
freqg <- data.frame(mat=c(1,2),flank=c(1,2,3,4))
这似乎很简单
freqg$condition[freqg$mat==1 & freqg$flank==1] <- "LK"
freqg$condition[freqg$mat==1 & freqg$flank==2] <- "FQ"
,但是两列中值的组合很大,我还需要为许多其他数据帧复制该值。可以对组合进行自定义编码吗?
答案 0 :(得分:2)
您可能更喜欢dplyr等价物
freqg %>%
mutate(condition = case_when(
mat %in% 1 & flank %in% 1 ~ "LK",
mat %in% 1 & flank %in% 2 ~ "FQ"))
答案 1 :(得分:2)
在原始数据框架上创建组合条件数据框架 (comb_df
和 left_join
strong>使用基于R的dplyr或merge
。
使用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>
答案 2 :(得分:1)
您可以对所有组合使用expand.grid
,然后创建我称为cc
的另一列,然后使用merge
将此数据框与我称为{的condition dataframe
{1}}
cond_df