gpt4 book ai didi

R:计算每列满足条件的次数并且行名出现在列表中

转载 作者:行者123 更新时间:2023-12-04 13:05:33 24 4
gpt4 key购买 nike

我有一个带有计数信息的数据框 (df1)

<表类="s-表"><头>行名样本1样本2样本 3<正文>m1051平方米175立方米620m4310

第二个带有示例信息 (df2)

<表类="s-表"><头>行名批处理总计数<正文>示例1一个10示例2b15示例3一个6

我还有两个列表,其中包含有关 m 值的信息(如有必要,可以很容易地转换为另一个数据框,但我不想添加到计数信息中,因为它非常大)。不存在模式(例如偶数和奇数),我只是使用一个非常简单的示例

x <- c("m1", "m3")y <- c("m2", "m4")

我想做的是在示例信息中再添加两列。这是每个样本中每个 m 值大于 5 并出现在列表 x 或 y 中的计数

<表类="s-表"><头>行名批处理总计数x<日>是 <正文>示例1一个1010示例2b1511示例3一个601

我目前的策略是为 x 和 y 创建一个值列表,然后将它们附加到 df2。到目前为止,这是我的尝试:

numX <- colSums(df1[sum(rownames(df1)>10 %in% x),])numX <- colSums(df1[sum(rownames(df1)>10 %in% x),])都返回 0 的列表

numX <- colSums(df1[rownames(df1)>10 %in% x,])返回满足每列条件的计数值之和的列表

numX <- length(df1[rownames(df1)>10 %in% novel,])返回满足条件的次数(在本例中为 2L)

我不太确定如何处理这个问题,所以我一直在尝试。我曾尝试寻找答案,但也许我只是在努力寻找合适的措辞。

最佳答案

我们可以用 rowwise

library(dplyr)
df2 %>%
rowwise %>%
mutate(x = +(sum(df1[[rownames]][df1$rownames %in% x]) >= 5),
y = +(sum(df1[[rownames]][df1$rownames %in% y]) >= 5)) %>%
ungroup

-输出

# A tibble: 3 × 5
rownames batch totalcount x y
<chr> <chr> <int> <int> <int>
1 sample1 a 10 1 0
2 sample2 b 15 1 1
3 sample3 a 6 0 1

或者根据数据,base R 选项将是

out <- aggregate(. ~ grp, FUN = sum, 
transform(df1, grp = c('x', 'y')[1 + (rownames %in% y)] )[-1])
df2[out$grp] <- +(t(out[-1]) >= 5)

-输出

> df2
rownames batch totalcount x y
1 sample1 a 10 1 0
2 sample2 b 15 1 1
3 sample3 a 6 0 1

数据

df1 <- structure(list(rownames = c("m1", "m2", "m3", "m4"), sample1 = c(0L, 
1L, 6L, 3L), sample2 = c(5L, 7L, 2L, 1L), sample3 = c(1L, 5L,
0L, 0L)), class = "data.frame", row.names = c(NA, -4L))

df2 <- structure(list(rownames = c("sample1", "sample2", "sample3"),
batch = c("a", "b", "a"), totalcount = c(10L, 15L, 6L)),
class = "data.frame", row.names = c(NA,
-3L))

关于R:计算每列满足条件的次数并且行名出现在列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69624029/

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