将列中的字符替换为R中的上一个列字符

时间:2016-11-26 00:01:37

标签: r

我有一个snps数据框及其各自的代理。

我想在代理列中每次出现“警告”时替换前一列中的字符,即在snp列中。

所以,如果我有

snp        proxy
rs272653   rs235343
rs35775    WARNING
rs726354   rs28635

我想:

snp        proxy
rs272653   rs235343
rs35775    rs35775
rs726354   rs28635


sessionInfo()

R version 3.3.2 (2016-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.1 LTS

3 个答案:

答案 0 :(得分:1)

我有什么遗失的吗?如果df是你的数据框,它应该是直截了当的。

df[df$proxy == "WARNING", "proxy"] <- df[df$proxy == "WARNING", "snp"]

答案 1 :(得分:0)

一种选择是使用正则表达式(regexpr)和一种机制来替换与另一个字符串(regmatches<-)的匹配。您的数据:

x <- structure(list(snp = c("rs272653", "rs35775", "rs726354"), proxy = c("rs235343", "**WARNING**", "rs28635")), .Names = c("snp", "proxy"), class = "data.frame", row.names = c(NA, -3L))

代码。请注意,regmatches<-是R中使用副作用进行更改的少数几个函数之一:尽管此调用返回(无形地)向其输入的向量(x$snp ),它正在更改x$proxy的内部存储空间。

regmatches(x$proxy, gregexpr("warning", x$proxy, ignore.case = TRUE)) <- x$snp
x
#        snp       proxy
# 1 rs272653    rs235343
# 2  rs35775 **rs35775**
# 3 rs726354     rs28635

答案 2 :(得分:0)

最重要的是,谢谢大家的答案!

因此,我的数据框data包含列&#34; SNP&#34;和#34;代理&#34;。这些都是因素!因此,我必须首先确切地知道&#34; SNP&#34;专栏有&#34;警告&#34;在&#34;代理&#34;列,然后将其添加到&#34;代理&#34;中的级别。

data[data$Proxy == "WARNING", "SNP"]
#[1] rs11571833 rs17879961 rs12048493 rs72755295 rs9257408


levels(data$Proxy) <- c(levels(data$Proxy), "rs11571833", "rs17879961", "rs12048493", "rs72755295", "rs9257408")

只有这样才会@code_is_entropy回答工作!对不起,对不起!

data[data$Proxy == "WARNING", "Proxy"] <- data[data$Proxy == "WARNING", "SNP", drop = FALSE]

干杯!