基于两列中值组合的列

时间:2018-07-04 18:37:03

标签: r dataframe

我有一个数据框,我想根据其他两个列的值创建一个新列。虚拟数据框

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"

,但是两列中值的组合很大,我还需要为许多其他数据帧复制该值。可以对组合进行自定义编码吗?

3 个答案:

答案 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