作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 2 个数据框,我试图保持分开,但想根据 df2 中的行的平均值计算 df1 中的新列:
df1:
Name <- c("t1", "t2", "t3")
Diam <- c(95, 104, 72)
Rad <- c(47.5, 52, 36)
df1 <- data.frame(Name, Diam, Rad)
df2:
Name <- c("t1A", "t1B", "t2A", "t2B", "t2C", "t3B")
Width <- c(4000, 3200, 2300, 2700, 2100, 3500)
df2 <- data.frame(Name, Width)
我想在 df1 中添加第四列,当“名称”的前 2 个字符相同时,计算 df2 中“宽度”的平均值。我的预期输出如下:
df3:
Name <- c("t1", "t2", "t3")
Diam <- c(95, 104, 72)
Rad <- c(47.5, 52, 36)
WidthMean <- c(3600, 2366.667, 3500)
df3 <- data.frame(Name, Diam, Rad, WidthMean)
我可以通过拆分 df2 中的“名称”列,然后根据新的拆分名称找到平均值,然后将 df2 中的平均值作为新列添加到 df1。但是,我必须对大约 75 个 data.frames 执行此操作,并希望找到一种更快的方法来处理数据(并且代码行更少!)。
当前代码:
df2$"NameID" <- df2$Name
df2$NameID <- gsub(".?$", "", df2$NameID)
df2out <- aggregate(Width ~ NameID, data = df2, FUN = mean)
df1$"WidthMean" <- df2out$Width
df1
最佳答案
这是使用 sapply
获取 df3
的解决方案:
df3 <- df1
df3$WidthMean <- sapply(df1$Name, function(name) {
pattern = paste('^', name, sep='')
mean(subset(df2, grepl(pattern, Name))$Width)
})
df3
输出:
Name Diam Rad WidthMean
1 t1 95 47.5 3600.000
2 t2 104 52.0 2366.667
3 t3 72 36.0 3500.000
如果你有 75 个看起来像 df1
的 dfs,你可以使用 lapply
来完成它们:
lapply(list(df1, df1), function(df) {
df_out <- df
df_out$WidthMean <- sapply(df$Name, function(name) {
pattern = paste('^', name, sep='')
mean(subset(df2, grepl(pattern, Name))$Width)
})
df_out
})
输出:
[[1]]
Name Diam Rad WidthMean
1 t1 95 47.5 3600.000
2 t2 104 52.0 2366.667
3 t3 72 36.0 3500.000
[[2]]
Name Diam Rad WidthMean
1 t1 95 47.5 3600.000
2 t2 104 52.0 2366.667
3 t3 72 36.0 3500.000
关于R从第二个数据框计算新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24787768/
我是一名优秀的程序员,十分优秀!