对于如何在dataset中创建新列,我有一个问题,方法是检查数据集中的一个列中是否存在一个值,并根据该值为不同的dataframe分配列。由于这种描述非常模糊,请参见下面的示例数据集:
newDf <- data.frame(c("Juice 1", "Juice 2", "Juice 3", "Juice 4","Juice 5"),
                    c("Banana", "Banana", "Orange", "Pear", "Apple"),
                    c("Blueberry", "Mango", "Rasberry", "Spinach", "Pear"),
                    c("Kale", NA, "Cherry", NA, "Peach"))
colnames(newDf) <- c("Juice", "Fruit 1", "Fruit 2", "Fruit 3")
dfChecklist <- data.frame(c("Banana", "Cherry"),
                          c("100", "80"),
                          c("5", "3"),
                          c("4", "5"))
colnames(dfChecklist) <- c("FruitCheck", "NutritionalValue", "Deliciousness", "Difficulty")这提供了以下数据格式:
    Juice Fruit 1   Fruit 2 Fruit 3
1 Juice 1  Banana Blueberry    Kale
2 Juice 2  Banana     Mango    <NA>
3 Juice 3  Orange  Rasberry  Cherry
4 Juice 4    Pear   Spinach    <NA>
5 Juice 5   Apple      Pear   Peach
  FruitCheck NutritionalValue Deliciousness Difficulty
1     Banana              100             5          4
2     Cherry               80             3          5我想把这两者结合起来,得出这样的结果:
   Juice Fruit 1   Fruit 2 Fruit 3 FruitCheck NutritionalValue Deliciousness Difficulty
1 Juice 1  Banana Blueberry    Kale     Banana              100             5          4
2 Juice 2  Banana     Mango    <NA>     Banana              100             5          4
3 Juice 3  Orange  Rasberry  Cherry     Cherry               80             3          5
4 Juice 4    Pear   Spinach    <NA>       <NA>             <NA>          <NA>       <NA>
5 Juice 5   Apple      Pear   Peach       <NA>             <NA>          <NA>       <NA>上面的数据集就是一个例子,我自己的数据集更大更复杂。
提前谢谢你的帮助!
发布于 2022-05-12 11:17:18
首先查找每一行的第一次匹配
tmp=unlist(
  apply(
    newDf[,grepl("Fruit",colnames(newDf))],
    1,
    function(x){
      y=as.vector(x)
      y=y[which.min(match(y,dfChecklist$FruitCheck))]
      ifelse(length(y)==0,NA,y)
    }
  )
)将其添加到原始df中,然后进行简单的合并。
newDf$FruitCheck=tmp
merge(
  newDf,
  dfChecklist,
  by="FruitCheck",
  all.x=T
)结果是
  FruitCheck   Juice Fruit 1   Fruit 2 Fruit 3 NutritionalValue Deliciousness
1     Banana Juice 1  Banana Blueberry    Kale              100             5
2     Banana Juice 2  Banana     Mango    <NA>              100             5
3     Cherry Juice 3  Orange  Rasberry  Cherry               80             3
4       <NA> Juice 4    Pear   Spinach    <NA>             <NA>          <NA>
5       <NA> Juice 5   Apple      Pear   Peach             <NA>          <NA>
  Difficulty
1          4
2          4
3          5
4       <NA>
5       <NA>https://stackoverflow.com/questions/72214031
复制相似问题