作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一个没有经验的 R 用户,我正在尝试使用线性建模在差异表达统计分析之前预处理一些生物数据。
我想按数据框中的行插补 == 1 的值,并且我想用行的中位数插补这些值。
以下是一些示例数据:
treatment1 <- c(125302640, 857538880 ,43258573000, 1, 1, 225966496, 204262864)
treatment2 <- c(193170560, 797860990, 35646611000, 1, 221060400, 1, 1027615810)
treatment3 <- c(208872576, 914684860, 31535493100, 1, 1, 659360130, 3709508860)
count <- c(0, 0, 0, 3, 2, 1, 0)
df <- data.frame(treatment1, treatment2, treatment3, count)
我在数据框中创建了一列名为“count”的列,因为我只想估算数据框中行中 1 的数量 = 1 的值。
我首先使用单行作为测试:
test.row <- df[6,1:4]
test.row
treatment1 treatment2 treatment3 count
6 225966496 1 659360130 1
我想我应该编写一个在单行上运行的函数,然后使用 plyr::adply 和 .margins = 1,将该函数应用于整个 df。
这是我想到的:
if(test.row$count == 1) {
median(as.numeric(test.row[1:3]))
} else {
test.row[1:3]
}
# Output = 225966496, which is what I want.
但我不知道如何将它集成到函数中。这是我的最新尝试:
impute.1 <- function(df, x){
if(df$count == 1) {
df[x == 1] <- median(as.numeric(df[x]))
result <- df[x]
} else {
result <- df[x]
}
print(result)
}
impute.1(test.row, 1:3)
# Output =
# treatment1 treatment2 treatment3
# 6 225966496 1 659360130
# Desired Output =
# treatment1 treatment2 treatment3
# 6 225966496 225966496 659360130
因此它无法识别该行有 1 个计数为 1,因此它应该用该行的中位数替换 1 值。
非常感谢任何建议或评论!问候,托马斯。
最佳答案
另一种方法是使用tidyverse
:
library(tidyverse)
df %>%
rownames_to_column('rn') %>%
pivot_longer(-c(count, rn)) %>%
group_by(rn) %>%
mutate(value = replace(value, value == 1 & count == 1, median(value))) %>%
pivot_wider() %>%
ungroup() %>%
select(-count, everything(), count, -rn)
# A tibble: 7 x 4
treatment1 treatment2 treatment3 count
<dbl> <dbl> <dbl> <dbl>
1 125302640 193170560 208872576 0
2 857538880 797860990 914684860 0
3 43258573000 35646611000 31535493100 0
4 1 1 1 3
5 1 221060400 1 2
6 225966496 225966496 659360130 1
7 204262864 1027615810 3709508860 0
关于r - 将 = 1 的值与一行中其他观测值的中值进行插补。 (右),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68607350/
我是一名优秀的程序员,十分优秀!