遍历数据帧的列和填充另一列,如果条件符合
问题描述:
我有一个数据帧寻找这样的:我需要循环列A
到E
遍历数据帧的列和填充另一列,如果条件符合
> df
POP A B C D E
NA CC CC TC TT CC
NA TG TT TT TT TG
NA TT TA TT TT TT
NA CC CC TC TT CC
NA TC TT TT TT TT
NA AG GG GG GG AG
NA AA AA AG AG AA
NA GG GA GG AA GG
NA AA AA AA AT AA
,并填充第一列POP
当条件在其他列中匹配。特别是,我想有这样的结果:
> df
POP A B C D E
C/T CC CC TC TT CC
G/T TG TT TT TT TG
A/T TT TA TT TT TT
C/T CC CC TC TT CC
C/T TC TT TT TT TT
A/G AG GG GG GG AG
A/G AA AA AG AG AA
A/G GG GA GG AA GG
A/T AA AA AA AT AA
所以,当两个不同的字母的第一列被发现,打印两封信由/
按字母顺序分离POP
列。
真实的数据框有700列10000行。
答
这里有一个想法:
ind <- apply(sapply(df[-1], function(x) grepl('([A-Z])\\1', x)),
1,
function(y) match(FALSE, y))
ind
#[1] 3 1 2 3 1 1 3 2 4
mapply(function(i, j)
if (!is.na(j))
paste(sort(strsplit(levels(df[[j]])[df[i, j]], '')[[1]]),
collapse='/')
else
j,
seq_along(ind), ind + 1)
#[1] "C/T" "G/T" "A/T" "C/T" "C/T" "A/G" "A/G" "A/G" "A/T"
这看起来像大学基本的锻炼。看起来很容易,所以请稍微思考一下。 – Fibman