首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在与df不同的r中创建数组

在与df不同的r中创建数组
EN

Stack Overflow用户
提问于 2020-12-10 04:00:18
回答 1查看 25关注 0票数 0

因此,给定以下列,我需要创建一个包含列之间的差异的新数组。例如,在下面的示例中,我需要创建一个数组,该数组包含每所房子按str计算的平均一分和两分之间的差值,到目前为止,我有一些类似汇总的东西(diff=abs(diff(1,2)),.groups = "drop"),但这并不是很好的解决方法,我可以这样做吗?

代码语言:javascript
复制
,,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

所以我的理想输出看起来像这样,而不是数据帧,一个数组看起来像这样:

代码语言:javascript
复制
str      reg    smol 
reg     440-518 435-586
smol   432-587  447-597
regai  443-597  439-602

所以我要做的是提取每一列,创建新的列,然后在最后合并所有的差异,但这个过程会花费太长的时间,所以我试图找到更短的方法。此外,我还需要确保输出是绝对值

update now我正在做这样的事情:

diff =(abs(df$3-df$2))

EN

回答 1

Stack Overflow用户

发布于 2020-12-10 04:17:55

我们可以做到

代码语言:javascript
复制
cbind(df1[1], setNames(lapply(list(df1, df2), 
         function(x) abs(x$three - x$two)), c('reg', 'smol')))

-output

代码语言:javascript
复制
#     str reg smol
#1   reg  78  151
#2  smol 155  150
#3 regai 154  163

如果它是从xtabs创建的array,则选项也是

代码语言:javascript
复制
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)

数据

代码语言:javascript
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65224020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档