重复出现在 2/3 列中的符号
Repeat a symbol present in 2/3 column
我有以下数据集:
column1, column 2, column 3
chr,chr,chr
220,230k,560k
,5M,10M
,0.5,0.8
3,3.3,3.5
8,10B,7B
,5B,7B
5M,,8M
我想做的是:
如果 (ex "K") 出现在 2 列中,并且另一列不存在,则将 K 放在另一列中,
如果 (ex "B") 出现在 2 列中,并且另一列不存在,则将 B 放在另一列中,
如果 (ex "M") 出现在 2 列中,并且另一列不存在,则将 B 放在另一列中,
如果单元格不存在,什么都不做
有人可以帮我解决这个问题吗?
此致
一种不太优雅的方式
df=read.table(text="
column1, column 2, column 3
220,230k,560k
,5M,10M
,0.5,0.8
3,3.3,3.5
8,10B,7B
,5B,7B
5M,,8M",h=T,sep=",",na.strings="")
t(
apply(df,1,function(x){
for (s in c("k","B","M")) {
tmp=grepl(s,x)
if (sum(tmp)==2) {
x[!is.na(x) & !tmp]=paste0(x[!is.na(x) & !tmp],s)
}
}
x
})
)
column1 column.2 column.3
[1,] "220k" "230k" "560k"
[2,] NA "5M" "10M"
[3,] NA "0.5" "0.8"
[4,] "3" "3.3" "3.5"
[5,] "8B" "10B" "7B"
[6,] NA "5B" "7B"
[7,] "5M" NA "8M"
我有以下数据集:
column1, column 2, column 3
chr,chr,chr
220,230k,560k
,5M,10M
,0.5,0.8
3,3.3,3.5
8,10B,7B
,5B,7B
5M,,8M
我想做的是:
如果 (ex "K") 出现在 2 列中,并且另一列不存在,则将 K 放在另一列中,
如果 (ex "B") 出现在 2 列中,并且另一列不存在,则将 B 放在另一列中,
如果 (ex "M") 出现在 2 列中,并且另一列不存在,则将 B 放在另一列中,
如果单元格不存在,什么都不做
有人可以帮我解决这个问题吗?
此致
一种不太优雅的方式
df=read.table(text="
column1, column 2, column 3
220,230k,560k
,5M,10M
,0.5,0.8
3,3.3,3.5
8,10B,7B
,5B,7B
5M,,8M",h=T,sep=",",na.strings="")
t(
apply(df,1,function(x){
for (s in c("k","B","M")) {
tmp=grepl(s,x)
if (sum(tmp)==2) {
x[!is.na(x) & !tmp]=paste0(x[!is.na(x) & !tmp],s)
}
}
x
})
)
column1 column.2 column.3
[1,] "220k" "230k" "560k"
[2,] NA "5M" "10M"
[3,] NA "0.5" "0.8"
[4,] "3" "3.3" "3.5"
[5,] "8B" "10B" "7B"
[6,] NA "5B" "7B"
[7,] "5M" NA "8M"