将R中的部分字符串替换为数值

时间:2017-10-31 12:47:22

标签: r replace

我的数据框包含一个带有压缩数值的列。

final_table.df                      ##Dataframe
final_table.df$insta_followers      ##Column

它包含两组我需要更改的格式化值:

1。)一个像10K的值,我可以用“K”代替000

2。)我无法解决的一个值,如9.3K,我需要成为9300

如何在我的行中将9.3K等值替换为9300?

3 个答案:

答案 0 :(得分:1)

您可以从矢量中移除K并将其转换为数字变量

x<-c("9.3K","10K")
substring(x,1,nchar(x)-1) # removes the last character "9.3" "10"
as.numeric(substring(x,1,nchar(x)-1))*1000 # turn into a numeric and multiply by 1000
9300 10000

如果您的值不包含K,例如92,那么您可以使用ifelse命令,例如

as.numeric(ifelse(grepl("K",x),as.numeric(substring(x,1,nchar(x)-1))*1000 ,x))

如果x包含K以上述方式转换,则返回x

答案 1 :(得分:0)

使用“strsplit”可以解决这个问题。这是一个例子

def main():
    with open("input.csv") as f:
        rows = [
            tuple(int(x) for x in line.strip().split("\t")) 
            for line in f
            if line.strip()
            ]
    rows.sort()
    with open("output.csv", "w") as f:
        for row in rows:
            f.write("{}\n".format("\t".join(str(x) for x in row)))

main()


$ cat input.csv 
196 242 3   881250949
186 302 3   891717742
22  377 1   878887116
244 51  2   880606923

cat output.csv
22  377 1   878887116
186 302 3   891717742
196 242 3   881250949
244 51  2   880606923

我希望这会有效,如果不通知我的话!

答案 2 :(得分:0)

我开始介绍三种不同的解决方案,但我认为这是最干净,最简单,最容易理解的。如果你有更多的格式而不仅仅是1&amp; 2但它应该适用于那些。

df$followers <- ifelse(substr(df$followers, 2, 2)==".",  # if second char is "."
                       gsub("K", "00", df$followers),  # replace K with 00
                       gsub("K", "000", df$followers))  # else replace K with 000
df$followers <- as.numeric(df$followers)  # convert to numeric at the end