R 用另一个数据帧索引一个数据帧
我有两个长的R 用另一个数据帧索引一个数据帧,r,R,我有两个长的data.frame的子集: df1 <- data.frame("trial" = c('SA1','SA2','ES1','SA3','SA4','ES5'), "Genotype" = c('GID1','GID1','GID1','GID2','GID2','GID2')) df2 <- data.frame('GID1'= c('0','1'),'GID2'=c('1','0')) 请注意,data.frame非常大,我在%中尝试了match和%等函数,但没有
data.frame的子集:
df1 <- data.frame("trial" = c('SA1','SA2','ES1','SA3','SA4','ES5'), "Genotype" = c('GID1','GID1','GID1','GID2','GID2','GID2'))
df2 <- data.frame('GID1'= c('0','1'),'GID2'=c('1','0'))
请注意,data.frame
非常大,我在%
中尝试了match
和%等函数,但没有成功
提前感谢。这比看起来容易:
df3 <- df2[df1$Genotype]
colnames(df3) <- df1$trial
df3
# SA1 SA2 ES1 SA3 SA4 ES5
# 1 0 0 0 1 1 1
# 2 1 1 1 0 0 0
df3哇,谢谢。你能解释一下不使用逗号对数据帧进行子集设置的目的是什么吗。这对我来说是一件新鲜事,我一直认为在对数据帧进行子集设置时,您应该按行或列进行子集设置。thanks@AlexandreMondaini,你说得对,我在这里按栏目分组。但是,您可能会得到,例如,第一列同时包含df1[,1]
和df1[1]
。一个直观的原因是,数据帧实际上是由长度相等的元素(列)组成的列表。因此,实际上第一行可以是df3
df3 <- df2[df1$Genotype]
colnames(df3) <- df1$trial
df3
# SA1 SA2 ES1 SA3 SA4 ES5
# 1 0 0 0 1 1 1
# 2 1 1 1 0 0 0