我在我的代码中使用colSums但我还需要总和旁边的标准偏差.我在互联网上搜索,发现这个页面只包含:
colSums
colMeans
Run Code Online (Sandbox Code Playgroud)
http://stat.ethz.ch/R-manual/R-devel/library/base/html/colSums.html
我试过这个:
colSd
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误:
Error: could not find function "colSd"
Run Code Online (Sandbox Code Playgroud)
我如何做同样的事情,但标准偏差:
colSd
Run Code Online (Sandbox Code Playgroud)
这是代码:
results <- colSums(x,na.rm=TRUE)#### here I want colsd
Run Code Online (Sandbox Code Playgroud) 这是关于行操作的一个很好的解释data.table
我想到的另一种选择是id为每一行使用唯一的,然后使用by参数应用一个函数.像这样:
library(data.table)
dt <- data.table(V0 =LETTERS[c(1,1,2,2,3)],
V1=1:5,
V2=3:7,
V3=5:1)
# create a column with row positions
dt[, rowpos := .I]
# calculate standard deviation by row
dt[ , sdd := sd(.SD[, -1, with=FALSE]), by = rowpos ]
Run Code Online (Sandbox Code Playgroud)
问题:
有没有理由不使用这种方法?也许其他更有效的替代品?
为什么使用by = .I不起作用?
dt[ , sdd := sd(.SD[, -1, with=FALSE]), by = .I ]
我想按行检查多列是否全部相等。我想出了一种复杂的方法来计算每组每个值的出现次数。但这似乎有些……麻烦。
样本数据
sample_df <- data.frame(id = letters[1:6], group = rep(c('r','l'),3), stringsAsFactors = FALSE)
set.seed(4)
for(i in 3:5) {
sample_df[i] <- sample(1:4, 6, replace = TRUE)
sample_df
}
Run Code Online (Sandbox Code Playgroud)
期望的输出
library(tidyverse)
sample_df %>%
gather(var, value, V3:V5) %>%
mutate(n_var = n_distinct(var)) %>% # get the number of columns
group_by(id, group, value) %>%
mutate(test = n_distinct(var) == n_var ) %>% # check how frequent values occur per "var"
spread(var, value) %>%
select(-n_var)
#> # A tibble: 6 x 6
#> # Groups: id, group …Run Code Online (Sandbox Code Playgroud)