Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何基于列中的相同值嵌套数据帧?_R_Dataframe - Fatal编程技术网

R 如何基于列中的相同值嵌套数据帧?

R 如何基于列中的相同值嵌套数据帧?,r,dataframe,R,Dataframe,我有一个数据框,里面有一些相同的名字,我希望得到一些相关数字的基本统计数据。最初,数据如下所示: name res1 res2 res3 foo 1.1 NA 10 foo 2.4 NA 2.1 foo NA 1 1.2 bar 1 2 3 name res1 res2 res3 foo [1.1,2.4] [1] [10,2.1,1.2] bar [1] [2]

我有一个数据框,里面有一些相同的名字,我希望得到一些相关数字的基本统计数据。最初,数据如下所示:

name res1 res2 res3
foo   1.1   NA   10
foo   2.4   NA  2.1
foo   NA     1  1.2
bar     1    2    3
name       res1  res2           res3
foo   [1.1,2.4]   [1]   [10,2.1,1.2]
bar         [1]   [2]            [3]
为了获得统计数据,我考虑如下嵌套数据:

name res1 res2 res3
foo   1.1   NA   10
foo   2.4   NA  2.1
foo   NA     1  1.2
bar     1    2    3
name       res1  res2           res3
foo   [1.1,2.4]   [1]   [10,2.1,1.2]
bar         [1]   [2]            [3]

这将是一个步骤,可以得到每个向量的平均值和S.D,等等。i、 e.然后,我会为res1的平均值、res1的SD等添加列。如何基于相同的值将数据框嵌套在一列中?

虽然我同意最近邮件的建议,但您可以使用
dplyr
获得所需的输出:

library(dplyr)
dtf %>% group_by(name) %>% summarize_all( ~ list(.[!is.na(.)]))

# # A tibble: 2 x 4
#     name      res1      res2      res3
#   <fctr>    <list>    <list>    <list>
# 1    bar <dbl [1]> <int [1]> <dbl [1]>
# 2    foo <dbl [2]> <int [1]> <dbl [3]>
库(dplyr)
dtf%%>%group_by(名称)%%>%SUMMARY_all(~list(.[!is.na(.)]))
##A tibble:2 x 4
#名称res1 res2 res3
#               
#1巴
#2富
数据:

dtf <- read.table(textConnection('name res1 res2 res3
foo   1.1   NA   10
foo   2.4   NA  2.1
foo   NA     1  1.2
bar     1    2    3'), header = TRUE)

dtf我花了几个小时,但我根据最近的邮件制定了一个创建长版本的策略

输入数据(感谢mt1022的支持)


tidyverse
通过
nest
map

你的数据
mydf%
nest()
#名称数据
#              
#一福
#2巴
#使用'mutate(data=map(data,~…)对嵌套数据执行操作`
统计数据%
突变(数据=map(数据,~mean(.x$res3,na.rm=TRUE))%>%
unnest(数据)
#名称数据
#       
#1 foo 4.433333
#2巴300万

我不需要像嵌套那样麻烦,我只需要创建一个“长”数据集,类似于
cbind(dat[“name”]、stack(dat[-1])
其中有3列-
name
/
group
/
/。如果您有摘要级别的统计数据(平均值/sd等),它们应该以摘要级别存储在单独的数据集中。谢谢@thelatemail,这听起来很有趣。如果你能发布一些关于如何处理统计部分的代码,那将非常有用!干杯。我根据你的建议制定了一个策略,@thelatemail。谢谢。谢谢(+1).我花了几个小时从tibble中提取统计数据,只是选择了“长”版本。但是,你回答了提出的问题,所以我接受!
library(plyr)
ddply(long, c("name","ind"), summarise,
  count = length(values[!is.na(values)]),
  mean = mean(values[!is.na(values)]),
  sd = sd(values[!is.na(values)]),
  sem = sd(values[!is.na(values)])/sqrt(length(values[!is.na(values)])))
mydf <- structure(list(name = c("foo", "foo", "foo", "bar"), res1 = c(1.1, 
2.4, NA, 1), res2 = c(NA, NA, 1L, 2L), res3 = c(10, 2.1, 1.2, 
3)), .Names = c("name", "res1", "res2", "res3"), row.names = c(NA, 
-4L), class = c("data.table", "data.frame"))
library(tidyverse)
# nest 'other'-columns by `name` group
nesteddf <- mydf %>%
          group_by(name) %>%
          nest()

#    name             data
#   <chr>           <list>
# 1   foo <tibble [3 x 3]>
# 2   bar <tibble [1 x 3]>  

# perform operations on nested data with `mutate(data = map(data, ~...)`
stats <- nesteddf %>%
           mutate(data = map(data, ~mean(.x$res3, na.rm=TRUE))) %>%
           unnest(data)

#    name     data
#   <chr>    <dbl>
# 1   foo 4.433333
# 2   bar 3.000000