r - 在 r 中创建与 df 不同的数组
问题描述
因此,给定以下列,我需要创建一个新数组,其中包含列之间的差异,例如下面的示例我需要创建一个数组,其中包含 str 为每个房屋的平均一分和二分之间的差异,所以到目前为止,我有一些类似 summarise(diff = abs(diff(one,two)), .groups = "drop") 但它并不安静,我会怎么做?
,,house = reg
str one two three
reg 443 518 440
smol 342 587 432
regai 534 597 443
,,house = smol
str one two three
reg 530 586 435
smol 541 597 447
regai 539 602 439
因此,就像我的理想输出看起来像这样,而不是数据框,数组看起来像:
str reg smol
reg 440-518 435-586
smol 432-587 447-597
regai 443-597 439-602
所以我想做的是提取每一列创建新列并有所作为,然后最后结合所有的差异,但这个过程会花费太长时间,所以我试图找到更短的方法。我还需要确保输出是绝对值
现在更新我正在做这样的事情:
diff = (abs(df$3 - df$2))
解决方案
我们可以做的
cbind(df1[1], setNames(lapply(list(df1, df2),
function(x) abs(x$three - x$two)), c('reg', 'smol')))
-输出
# str reg smol
#1 reg 78 151
#2 smol 155 150
#3 regai 154 163
如果它是array
created from xtabs
,一个选项也是
out1 <- lapply(seq_len(dim(input_data)[3]), function(i) {
x <- as.data.frame(input_data[,, i])
abs(x$three - x$two)
})
names(out1) <- c('reg', 'smol')
cbind(as.data.frame(input_data[,,1])[1]), out1)
数据
df1 <- structure(list(str = c("reg", "smol", "regai"), one = c(443L,
342L, 534L), two = c(518L, 587L, 597L), three = c(440L, 432L,
443L)), class = "data.frame", row.names = c(NA, -3L))
df2 <- structure(list(str = c("reg", "smol", "regai"), one = c(530L,
541L, 539L), two = c(586L, 597L, 602L), three = c(435L, 447L,
439L)), class = "data.frame", row.names = c(NA, -3L))
推荐阅读
- php - Laravel 通过 ajax 请求从刀片重定向到控制器
- cmake - 多个debian包无依赖污染
- javascript - 窗口滚动功能不适用于移动设备
- python-3.x - 由于页面的 Cookie,我无法复制网站调用以检索数据
- dialogflow-es - 在 Dialogflow CX 中为 Dialogflow messenger 和 Facebook messenger 集成使用不同的自定义负载
- unity3d - 在 Unity 3D 中制作背景时出现问题
- r - 将 R sweave (.Rnw) 文件转换为 PDF 时出现问题
- permissions - odoo 12 中 ir.config_paramenter 的权限
- firebase - 在 Cloud Run 上部署的 Firebase Admin SDK 是否需要 GOOGLE_CLOUD_PROJECT env var?
- react-native - 警告:expo sdkVersion 43.0.0 的无效版本 react-native@0.64.2。使用 react-native@0.64.3