使用基本R,我可以转置一个数据帧,比如说mtcars,它包含同一个类的所有列:
as.data.frame(t(mtcars))
Run Code Online (Sandbox Code Playgroud)
或者用管道:
library(magrittr)
mtcars %>% t %>% as.data.frame
Run Code Online (Sandbox Code Playgroud)
如何在tidyr或tidyverse包中完成相同的操作?
我在下面的尝试给出:
错误:行的重复标识符
library(tidyverse)
mtcars %>% gather(var, value, everything()) %>% spread(var, value)
Run Code Online (Sandbox Code Playgroud) 我想在一个特定列和数据帧中的所有其他列之间找到相关性,p值和95%CI.'broom'包提供了一个示例,说明如何使用带有dplyr和管道的cor.test在两列之间执行此操作.对于mtcars,比如mpg列,我们可以与另一列运行相关:
library(dplyr)
library(broom)
mtcars %>% do(tidy(cor.test(.$mpg, .$cyl)))
estimate statistic p.value parameter conf.low conf.high
1 -0.852162 -8.919699 6.112687e-10 30 -0.9257694 -0.7163171
Run Code Online (Sandbox Code Playgroud)
输出是单行数据帧.我想为每列运行cor.test for mpg并将输出发送到一个单独的行.当mpg列与每个其他列配对时,所需的输出将如下所示:
estimate statistic p.value parameter conf.low conf.high
cyl -0.852162 -8.919699 6.112687e-10 30 -0.9257694 -0.7163171
disp -0.8475514 -8.747152 9.380327e-10 30 -0.9233594 -0.7081376
hp -0.7761684 -6.742389 1.787835e-07 30 -0.8852686 -0.5860994
drat 0.6811719 5.096042 1.77624e-05 30 0.4360484 0.832201
wt -0.8676594 -9.559044 1.293959e-10 30 -0.9338264 -0.7440872
qsec 0.418684 2.525213 0.01708199 30 0.08195487 0.6696186
vs 0.6640389 4.864385 3.415937e-05 30 0.410363 0.8223262
am 0.5998324 …Run Code Online (Sandbox Code Playgroud) 我想计算包含缺失值的数据框中每行的多个列的均值,并将结果放在一个名为"means"的新列中.这是我的数据帧:
df <- data.frame(A=c(3,4,5),B=c(0,6,8),C=c(9,NA,1))
A B C
1 3 0 9
2 4 6 NA
3 5 8 1
Run Code Online (Sandbox Code Playgroud)
如果列没有缺失值,则下面的代码可以成功完成任务,例如A列和B列.
library(dplyr)
df %>%
rowwise() %>%
mutate(means=mean(A:B, na.rm=T))
A B C means
<dbl> <dbl> <dbl> <dbl>
1 3 0 9 1.5
2 4 6 NA 5.0
3 5 8 1 6.5
Run Code Online (Sandbox Code Playgroud)
但是,如果列缺少值,例如C,则会出现错误:
> df %>% rowwise() %>% mutate(means=mean(A:C, na.rm=T))
Error: NA/NaN argument
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想用dplyr实现它.
在tidyverse中,汇总可用于具有单值函数的分组数据.例如
mtcars %>% group_by(cyl) %>% summarise(max(cos(mpg)))
Run Code Online (Sandbox Code Playgroud)
如果函数是矢量值,那么,如果我没有错,建议使用do.例如,do命令适用于phych包中的向量值函数'describe':
library(psych)
mtcars %>% group_by(cyl) %>% do(describe(.$mpg))
Run Code Online (Sandbox Code Playgroud)
如何同时将单值和向量值函数应用于分组数据?例如,如何将max(cos())和describe()同时应用于mpg列,并将输出作为一个数据帧?
我想将用户定义函数的输出反馈回其输入(递归映射),运行此迭代N次,并将每次迭代的输出保存在向量中。这对于“ for”循环很简单
my_fun <- function(x) {x/3 +1} # a user-defined function (trivial example)
my_l <- c()
x <- 0 # initial condition
for(i in 1:10) {
x <- my_fun(x)
my_l[i] <- x
}
print(my_l)
>[1] 1.000000 1.333333 1.444444 1.481481 1.493827 1.497942 1.499314 1.499771 1.499924 1.499975
Run Code Online (Sandbox Code Playgroud)
上面的作品,但似乎很粗糙。有更短的方法吗?也许有tidyverse / purrr?