【发布时间】:2014-01-30 02:57:21
【问题描述】:
我有以下两个数据框:
df1 <- data.frame(month=c("1","1","1","1","2","2","2","3","3","3","3","3"),
temp=c("10","15","16","25","13","17","20","5","16","25","30","37"))
df2 <- data.frame(period=c("1","1","1","1","1","1","1","1","2","2","2","2","2","2","3","3","3","3","3","3","3","3","3","3","3","3"),
max_temp=c("9","13","16","18","30","37","38","39","10","15","16","25","30","32","8","10","12","14","16","18","19","25","28","30","35","40"),
group=c("1","1","1","2","2","2","3","3","3","3","4","4","5","5","5","5","5","6","6","6","7","7","7","7","8","8"))
我想:
逐行检查
df1中month列中的值是否与df2中period列中的值匹配,即df1$month == df2$period。如果第 1 步不是 TRUE,即
df1$month != df2$period,然后重复第 1 步并将df1中的值与df2的下一行中的值进行比较,并且以此类推,直到df1$month == df2$period。如果是
df1$month == df2$period,检查df1的temp列的值是否小于或等于df2的max_temp列的值,即df1$temp <= df$max_temp.-
如果是
李>df1$temp <= df$max_temp,则在该行中为df2中的group列返回值,并将此值添加到df1,在一个名为"new_group"的新列中。 如果第 3 步不正确,即
df1$temp > df$max_temp,则返回第 1 步,将df1中的同一行与df2中的下一行进行比较。
我想要的输出数据框的一个例子是:
df3 <- data.frame(month=c("1","1","1","1","2","2","2","3","3","3","3","3"),
temp=c("10","15","16","25","13","17","20","5","16","25","30","37"),
new_group=c("1","1","1","2","3","4","4","5","6","7","7","8"))
我一直在玩ifelse 函数,需要一些帮助或重新定向。谢谢!
【问题讨论】:
-
您是否有意将您的数据保存为字符串?
-
数据文件实际上是制表符分隔的文本文件,我使用 read.table 作为数据帧上传到 R 中。作为一个 R 新手,我不知道数据是字符串。
-
数字周围的引号告诉你你有字符串。另外,请注意伪装成因子的字符串,您将拥有
read.table(.... stringsAsFactors=TRUE)(令人讨厌的是默认值) -
我给出的 data.frame 代码只是试图重现我在 R. Cheers 中使用的数据帧。
-
感谢您的洞察!
标签: r if-statement compare dataframe