我是R语言的初学者,想知道它如何用于每一行。
例如
我有两个数据帧。
我想看看其他数据框中是否存在行。 我想循环ab $ Fruits中的每一行,并检查每个名称是否在另一个数据框bc [E1:E3]列中。
ab<-data.frame(Fruits = c("Apple","Banana"),Units = c("3","2"))
bc<-data.frame("E1"=c("Apple","Grapes","Watermelon","Na"),
"E2"=c("Grapes","Berries","Custard","Guava"),
"E3"=c("Apple","Banana","Grapes","Na"))
例如
循环开始时,ab $ fruits的第一行与bc的每一列匹配,如果第一行(Apple)与bc $ E1匹配,则在ab $ new列中结果应返回1并循环中断。再次进入第二行(香蕉)搜索bc中的每一列,如果与bc $ E1列中的任何列都不匹配,则在ab $ new列中的结果应返回0。
再次循环迭代。
当ab $ fruits(apple)循环从第1行(苹果)到达并与bc $ E3列匹配,而第2行(香蕉)与Banana匹配时,两行的结果都应为ab $ new = 1。>
如果两个行的ab $ new == 1且两个单位的总和> = 5,则在ab $ view =“ Bill”中创建新列 输出ab:
**SN Fruits Number New** view
1 Apple 3 1 Bill
2 Banana 2 1 Bill
我尝试了%in%,但没有发生。
需要建议。
答案 0 :(得分:1)
您可以使用unlist
和可选的unique
并使用%in%
检查是否有水果。
ab$New <- +(ab$Fruits %in% unique(unlist(bc[-1])))
if(all(ab$New == 1) && sum(as.numeric(as.character(ab$Units))) >= 5) ab$view <- "Bill"
ab
# Fruits Units New view
#1 Apple 3 1 Bill
#2 Banana 2 1 Bill