首页 > 解决方案 > R:根据条件在整个数据框中复制行值的子集

问题描述

我有一个数据框df,其中包含两天内不同站点的计数数据:

day   site   count
1     A      2
1     B      3
2     A      10
2     B      12

我想为每个唯一站点添加一个day1count表示第1 天值的新列。count因此,在 和 的行上day==1count相同day1count的。新的df看起来像:

day   site   count   day1count
1     A      2       2
1     B      3       3
2     A      10      2
2     B      12      3

到目前为止,我已经创建了一个新列,其中第 1 行的值重复,其他所有行的值都为 NA:

df$day1count= ifelse(df$day==1, df$count, NA)

day   site   count   day1count
1     A      2       2
1     B      3       3
2     A      10      NA
2     B      12      NA

我现在如何将 NA 条目替换为对应于第 1 天的每个唯一站点的值?

标签: rdataframe

解决方案


我想到了。它不是很优雅(我邀请其他人提交更有效的方法)但是......

不要df$day1count= ifelse(df$day==1, df$count, NA)像我在原始示例中那样创建新列。相反,首先复制df, 但仅包含第 1 天的行

tmpdf = df[df$day==1,]

重命名countday1count,并删除day

tmpdf = rename(tmpdf, c("count"="day1count"))
tmpdf$day = NULL

按站点合并两个数据框

newdf = merge(x=df,y=tmpdf, by="site")
newdf

  site day count day1count
1    A   1     2         2
2    A   2    10         2
3    B   1     3         3
4    B   2    12         3

推荐阅读