用R中的上一列字符替换列中的字符

用R中的上一列字符替换列中的字符,r,R,我有一个SNP及其各自代理的数据框架 每次代理列中出现“警告”时,我都要将其替换为前一列中的字符,即snp列中的字符 所以如果我有 snp proxy rs272653 rs235343 rs35775 WARNING rs726354 rs28635 我想: snp proxy rs272653 rs235343 rs35775 rs35775 rs726354 rs28635 sessionInfo() R version 3.

我有一个SNP及其各自代理的数据框架

每次代理列中出现“警告”时,我都要将其替换为前一列中的字符,即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

一种选择是使用正则表达式(
regexpr
)和一种机制来用另一个字符串替换匹配项(
regmatches是否缺少某些内容?如果df是您的数据帧,它应该是直接的

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

df[df$proxy==“警告”,“代理”]首先,感谢大家的回答

因此,我的数据框
data
包含了“SNP”和“Proxy”两列。这些都是因素!因此,我必须首先准确地知道“SNP”列中的哪些SNP在“Proxy”列中有“WARNING”,然后将其添加到“Proxy”列中的级别

data[data$Proxy==“警告”,“SNP”]
#[1] rs11571833 rs17879961 rs12048493 rs72755295 rs9257408

级别(data$Proxy)您能给出一个代码提示来尝试替换警告吗?目前它太宽了,无法给出有意义的答案。RegmacheShow显示此代码不起作用的数据,否则我帮不了您。
>regmatches(data$Proxy,gregexpr(“警告”,data$Proxy,ignore.case=TRUE))啊哈…您在(或“as”)之后更改了您的问题我回答说,我可以调整。我不知道那个错误(它与字符串中的字符数无关),所以它一定是您的数据。因为您已经“足够显著地”更改了您的问题,此答案比需要的要复杂一些。我建议您接受@code_is_entropy的答案,或者修改您的问题以说明为什么直截了当的答案对您不起作用(并提供数据来触发“为什么”)。感谢您的帮助,但它给了我以下错误:
>data[data$Proxy==“WARNING”,“Proxy”]所以我一直在研究它,结果是我的data.frame有不止一个“警告”,这是一个级别出现5次的因素。因此:
j=data[data$Proxy==“WARNING”,“Proxy”]
j=droplevels(j)
[1]警告级别:WARNING
regmatches(x$proxy, gregexpr("warning", x$proxy, ignore.case = TRUE)) <- x$snp
x
#        snp       proxy
# 1 rs272653    rs235343
# 2  rs35775 **rs35775**
# 3 rs726354     rs28635
df[df$proxy == "WARNING", "proxy"] <- df[df$proxy == "WARNING", "snp"]
data[data$Proxy == "WARNING", "SNP"]
#[1] rs11571833 rs17879961 rs12048493 rs72755295 rs9257408


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