将分隔的字符串转换为数据框中的数字向量

时间:2017-10-11 15:48:05

标签: r

这是一个基本问题,我很尴尬地问。

我们假设我的数据框中包含以下格式的数据:

test <-"3000,9843,9291,2161,3458,2347,22925,55836,2890,2824,2848,2805,2808,2775,2760,2706,2727,2688,2727,2658,2654,2588"

我想将其转换为数字向量,我这样做了:

test <- as.numeric(unlist(strsplit(test, split=",")))

我现在想要将包含完整此数据的列的大型数据帧转换为等效的数字向量:

mutate(data,
  converted = as.numeric(unlist(strsplit(badColumn, split=","))),
)

这不起作用,因为可能是因为它将整个列转换为数字向量,然后用该值替换单行:

  

mutate_impl(.data,dots)中的错误:列converted必须是   长度20(行数)或1,而不是1274

我该怎么做?

3 个答案:

答案 0 :(得分:2)

这可能会有所帮助:

library(purrr)

mutate(data, converted = map(badColumn, function(txt) as.numeric(unlist(strsplit(txt, split = ",")))))

你得到的是一个包含数字向量的列表列。

答案 1 :(得分:1)

基础R

A=c(as.numeric(strsplit(test,',')[[1]]))

A
[1]  3000  9843  9291  2161  3458  2347 22925 55836  2890  2824  2848  2805  2808  2775  2760  2706  2727  2688  2727  2658  2654  2588


df$NEw2=lapply(df$NEw, function(x) c(as.numeric(strsplit(x,',')[[1]])))

df%>%mutate(NEw2=list(c(as.numeric(strsplit(NEw,',')[[1]]))))

答案 2 :(得分:1)

以下是重现错误的一些示例数据:

data <- data.frame(a = 1:3, 
                   badColumn = c("10,20,30,40,50", "1,2,3,4,5,6", "9,8,7,6,5,4,3"), 
                   stringsAsFactors = FALSE)

这是错误:

library(tidyverse)
mutate(data, converted = as.numeric(unlist(strsplit(badColumn, split=","))))
# Error in mutate_impl(.data, dots) : 
#   Column `converted` must be length 3 (the number of rows) or one, not 18

直接的方法是在整个列上使用strsplit,并lapply ... as.numeric将结果列表值从字符向量转换为数字向量。

x <- mutate(data, converted = lapply(strsplit(badColumn, ",", TRUE), as.numeric))
str(x)
# 'data.frame': 3 obs. of  3 variables:
#  $ a        : int  1 2 3
#  $ badColumn: chr  "10,20,30,40,50" "1,2,3,4,5,6" "9,8,7,6,5,4,3"
#  $ converted:List of 3
#   ..$ : num  10 20 30 40 50
#   ..$ : num  1 2 3 4 5 6
#   ..$ : num  9 8 7 6 5 4 3