gpt4 book ai didi

r - 将 = 1 的值与一行中其他观测值的中值进行插补。 (右)

转载 作者:行者123 更新时间:2023-12-02 02:04:36 26 4
gpt4 key购买 nike

我是一个没有经验的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com