Dan*_*les 2 excel r tidyr tibble
大家好:我正在使用tibbles来总结我的数据,现在我遇到了问题.我需要将我在tibble中的数据以excel或csv文件格式发送给合作伙伴.问题是它需要csv(或excel)文件处于特定的排列(没有整洁的数据),所以我想知道你是否可以帮助我一点点,至少,我的tibble到一个csv文件中在excel中编辑它的方法很容易.
这个元素看起来像这样:
# A tibble: 1,024 x 4
# Groups: Treatment [16]
Treatment Pressure mean std
<chr> <dbl> <dbl> <dbl>
1 "I Control " 0. 97.2 1.03
2 "I Control " 0.689 94.1 1.35
3 "I Control " 1.38 90.9 2.01
4 "I Control " 2.07 89.5 2.20
5 "I Control " 2.76 88.8 2.45
6 "I Control " 3.45 87.6 2.88
7 "I Control " 4.14 86.9 3.22
8 "I Control " 4.83 83.9 5.53
9 "I Control " 5.52 83.1 5.55
10 "I Control " 6.21 81.9 6.24
Run Code Online (Sandbox Code Playgroud)
我对变量"治疗"有16个不同的值.我想有一个看起来像这样的csv文件:

从图中可以看出,变量"Treatment"中的每个值都有2行,一行包含变量"mean"的值,另一行包含变量"std"的值.在csv表中,每列代表变量"Pressure"的每个不同值.
有什么想法或建议吗?提前感谢您的时间.
这只是将您的数据从宽格式转换为长格式,然后再转换为所需的宽格式.有几个可能的解决方案,在这种情况下,我使用gather和spread从tidyr包.
df<-structure(list(Treatment = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L), .Label = "I Control ", class = "factor"), Pressure = c(0,
0.689, 1.38, 2.07, 2.76, 3.45, 4.14, 4.83, 5.52, 6.21), mean = c(97.2,
94.1, 90.9, 89.5, 88.8, 87.6, 86.9, 83.9, 83.1, 81.9), std = c(1.03,
1.35, 2.01, 2.2, 2.45, 2.88, 3.22, 5.53, 5.55, 6.24)), .Names = c("Treatment",
"Pressure", "mean", "std"), class = "data.frame", row.names = c(NA, -10L))
library(tidyr)
long<-gather(df, variable, value, 3:4)
answer<-spread(long, Pressure, value)
write.csv(answer, "Answer.csv")
Run Code Online (Sandbox Code Playgroud)
当然,如果压力与治疗不同,最终的数据框架将非常混乱.
您的数据不容易复制,并且不足以代表治疗的变异性,因此我制作了一些随机数据:
set.seed(2)
dat <- data_frame(
Treatment = rep(letters[1:2], each=4),
Pressure = sample(100, size=8),
mean = sample(100, size=8),
std = sample(100, size=8)
)
library(dplyr)
library(tidyr)
Run Code Online (Sandbox Code Playgroud)
这是一个方法:
dat %>%
gather(k, v, -Treatment) %>%
group_by(Treatment, k) %>%
nest() %>%
mutate(data = map(data, ~ as.data.frame(t(.$v)))) %>%
unnest()
# # A tibble: 6 x 6
# Treatment k V1 V2 V3 V4
# <chr> <chr> <int> <int> <int> <int>
# 1 a Pressure 19 70 57 17
# 2 b Pressure 91 90 13 78
# 3 a mean 47 55 99 24
# 4 b mean 74 18 39 80
# 5 a std 98 23 44 8
# 6 b std 64 37 79 14
Run Code Online (Sandbox Code Playgroud)
即使您的治疗不平衡,这也很有效:
dat <- dat[-8,]
dat %>%
gather(k, v, -Treatment) %>%
group_by(Treatment, k) %>%
nest() %>%
mutate(data = map(data, ~ as.data.frame(t(.$v)))) %>%
unnest()
# # A tibble: 6 x 6
# Treatment k V1 V2 V3 V4
# <chr> <chr> <int> <int> <int> <int>
# 1 a Pressure 19 70 57 17
# 2 b Pressure 91 90 13 NA
# 3 a mean 47 55 99 24
# 4 b mean 74 18 39 NA
# 5 a std 98 23 44 8
# 6 b std 64 37 79 NA
Run Code Online (Sandbox Code Playgroud)
从这里开始,只需追加%>% write.csv(path, na="")或%>% readr::write_csv(path, na=""),这样 Excel 中的空单元格就不会被填充。