Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何创建一个新列,显示是否以及有多少变量共享一个特定观测值_R_Bioinformatics - Fatal编程技术网

R 如何创建一个新列,显示是否以及有多少变量共享一个特定观测值

R 如何创建一个新列,显示是否以及有多少变量共享一个特定观测值,r,bioinformatics,R,Bioinformatics,我有一个关于R.中一些生物信息学数据分析的问题 我的测试数据框架由一个变量“序列”和三个不同的变量组成,变量“序列”具有不同的字母代码作为观察值,三个不同的变量代表个体/样本(P1、P2、P3),表示个体中特定观察值的计数频率(例如,P3包含序列“AB”23次)。 我现在想创建一个新列(在我的数据框中已经指示为带NA的伪列X),显示每个序列行的序列是否在个体(P1、P2、P3)之间总体共享,更重要的是,三个个体中有多少人共享它。因此,新列中的数字只能介于1到3之间。例如:对于序列“ABCDE”,

我有一个关于R.中一些生物信息学数据分析的问题

我的测试数据框架由一个变量“序列”和三个不同的变量组成,变量“序列”具有不同的字母代码作为观察值,三个不同的变量代表个体/样本(P1、P2、P3),表示个体中特定观察值的计数频率(例如,P3包含序列“AB”23次)。 我现在想创建一个新列(在我的数据框中已经指示为带NA的伪列X),显示每个序列行的序列是否在个体(P1、P2、P3)之间总体共享,更重要的是,三个个体中有多少人共享它。因此,新列中的数字只能介于1到3之间。例如:对于序列“ABCDE”,新列将显示值1,因为它只出现在一个单独的P3中;对于序列“ABC”,新列将显示值2,因为它同时出现在P2和P3中;最后对于“ABCD”,它将显示3,因为所有的个体都包含该序列

在dput()之后,我的测试数据如下所示:

谢谢大家!

您可以尝试将“p”列与正计数相加:

mydf$X <- rowSums(mydf[, grep("^P", names(mydf))]>0)

 head(mydf, 4)
#  Sequence P1 P2 P3 X
#1       AB  5  6 23 3
#2      ABC  0  2 34 2
#3     ABCD 20  3  8 3
#4    ABCDE  0  0  5 1
mydf$X 0)
负责人(多年筹资框架,4)
#序列p1p2p3x
#1 AB 5 6 23 3
#2 ABC 02 34 2
#3 ABCD 20 3 8 3
#4 ABCDE 0 0 5 1

我们可以使用
Reduce
lappy

df1$X <- Reduce(`+`, lapply(df1[2:4], `>`, 0))
df1$X
#[1] 3 2 3 1 2 2 1 2 2
df1$X`,0))
df1$X
#[1] 3 2 3 1 2 2 1 2 2
Reduce
可以非常高效,如基准测试所示

df1$X <- Reduce(`+`, lapply(df1[2:4], `>`, 0))
df1$X
#[1] 3 2 3 1 2 2 1 2 2