仅连接一行中的矢量值

时间:2017-01-25 13:24:27

标签: r vector dataframe

我的R代码有问题。起初我有一个数据框(df),其中一列由数值和向量组成。这些向量还包含数值。这是数据帧的某些行的示例:

1. 60011000
2. 60523000
4. 60490000
5. 60599000
6. c("60741000", "60740000", "60742000")
7. 60647000
8. c("60766000", "60767000")
9. c("60563000", "60652000")

在列表中,您可以看到有一些行(6,8和9)包含向量元素。我想将向量中的元素连接到一个元素。 例如,第6行矢量的结果应如下所示:

  

607410006074000060742000

第8行的结果应如下所示

  

6076600060767000

我的数据框有超过30,000行,所以我不可能手动完成。

你能帮我解决我的问题吗?行数不会改变很重要。 非常感谢,请原谅我犯的错误。我不是母语人士。

3 个答案:

答案 0 :(得分:1)

数据:

dat <- read.table(text='60011000
60523000
60490000
60599000
c("60741000", "60740000", "60742000")
60647000
c("60766000", "60767000")
c("60563000", "60652000")', sep = "\t")

dat
#                                V1
# 1                        60011000
# 2                        60523000
# 3                        60490000
# 4                        60599000
# 5 c(60741000, 60740000, 60742000)
# 6                        60647000
# 7           c(60766000, 60767000)
# 8           c(60563000, 60652000)

您可以使用gsub将所有非数字字符替换为空字符串。

dat$V1 <- gsub("[^0-9]+", "", dat$V1)

dat
#                         V1
# 1                 60011000
# 2                 60523000
# 3                 60490000
# 4                 60599000
# 5 607410006074000060742000
# 6                 60647000
# 7         6076600060767000
# 8         6056300060652000

答案 1 :(得分:0)

你可以这样做:

df=data.frame(a=c(1,2,3,4,'c("60741000", "60740000", "60742000")'),
              b=c(1,2,3,4,5),
              stringsAsFactors = F)
> df
                                      a b
1                                     1 1
2                                     2 2
3                                     3 3
4                                     4 4
5 c("60741000", "60740000", "60742000") 5
df[,"a"]=sapply(df[,"a"],function(x) paste(eval(parse(text=x)),collapse = ""))
> df
                         a b
1                        1 1
2                        2 2
3                        3 3
4                        4 4
5 607410006074000060742000 5

答案 2 :(得分:0)

你走了; (看起来有人打我一拳)

df <- read.table("df.txt",header=F,)
df
# V1
# 1              123
# 2               12
# 3  c("1","55","6")
# 4              356
# 5 c("99","55","3")
df[,1] <- as.numeric(as.character(gsub("[^0-9]","",df[,1])))
df
# V1
# 1   123
# 2    12
# 3  1556
# 4   356
# 5 99553