首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向R中的dataframe添加pvalue列

向R中的dataframe添加pvalue列
EN

Stack Overflow用户
提问于 2018-07-20 16:40:02
回答 2查看 1.7K关注 0票数 3

我有一个像这样的数据文件:

代码语言:javascript
复制
A1 A2 A3 B1 B2 B3
0  1  0  2  3  3
5  6  4  4  6  6

我想添加一个基于t-测试As和Bs之间差异的重要性的专栏:

代码语言:javascript
复制
A1 A2 A3 B1 B2 B3 PValue
0  1  0  3  3  4  <some small number>
5  6  4  4  6  6  <some large number>

我试过像这样使用dplyr:

代码语言:javascript
复制
data %>% 
    mutate(PValue = t.test(unlist(c(A1,A2,A3),unlist(c(B1,B2,B3)))$p.value)

但是,由于某种原因,结果的PValue列是常量。我很感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-20 16:46:08

如果我们是逐行执行此操作,则pmap是一种方法。

代码语言:javascript
复制
library(tidyverse)
pmap_dbl(data, ~ c(...) %>% 
                   {t.test(.[1:3], .[4:6])$p.value}) %>% 
     bind_cols(data, PValue = .)
#   A1 A2 A3 B1 B2 B3      PValue
#1  0  1  0  2  3  3 0.007762603
#2  5  6  4  4  6  6 0.725030185

或者另一个选择是rowwisedo

代码语言:javascript
复制
data %>%
   rowwise() %>% 
   do(data.frame(., PValue = t.test(unlist(.[1:3]), unlist(.[4:6]))$p.value))
# A tibble: 2 x 7
#     A1    A2    A3    B1    B2    B3  PValue
#* <int> <int> <int> <int> <int> <int>   <dbl>
#1     0     1     0     2     3     3 0.00776
#2     5     6     4     4     6     6 0.725  

或者我们可以将gather格式为“long”格式,然后按t.test进行分组。

代码语言:javascript
复制
data %>%
  rownames_to_column('rn') %>%
  gather(key, val, -rn) %>% group_by(rn) %>% 
  summarise(PValue = t.test(val[str_detect(key, "A")],
                           val[str_detect(key, "B")])$p.value) %>% 
  pull(PValue) %>% 
  bind_cols(data, PValue = .)

数据

代码语言:javascript
复制
data <- structure(list(A1 = c(0L, 5L), A2 = c(1L, 6L), A3 = c(0L, 4L), 
B1 = c(2L, 4L), B2 = c(3L, 6L), B3 = c(3L, 6L)), .Names = c("A1", 
"A2", "A3", "B1", "B2", "B3"), class = "data.frame", row.names = c(NA, 
-2L))
票数 2
EN

Stack Overflow用户

发布于 2018-07-20 17:04:22

还使用了基本R中的apply

代码语言:javascript
复制
data$PValue = apply(data, 1, function(x) t.test(x[1:3], x[4:6])$p.value)

或者:

代码语言:javascript
复制
library(dplyr)

data %>% 
  mutate(PValue = apply(., 1, function(x) t.test(x[1:3], x[4:6])$p.value))

结果:

代码语言:javascript
复制
  A1 A2 A3 B1 B2 B3      PValue
1  0  1  0  2  3  3 0.007762603
2  5  6  4  4  6  6 0.725030185
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51447037

复制
相关文章

相似问题

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