R: вычислить длину текстовых данных в столбце - PullRequest
2 голосов
/ 20 октября 2019

У меня есть следующие данные CSV myData:

   name   attribute
1  Name1  attr11,attr12,attr13
2  Name2  attr21
3  Name3  attr31,attr32

Я хочу построить график распределения количества атрибутов, для этого мне нужно перебрать каждую строку и токенизировать данные встолбец attribute и посчитайте длину. По сути, это должно дать вектор или другие данные той же длины, что и исходные myData

Я пробовал:

num_attr <- length(as.list(strsplit(myData$attribute, ",")))  #this just returns 3

и:

num_attr <- as.list(strsplit(myData$attribute, ","))

это возвращает список что-то вроде:

["attr11" "attr12" "attr13", "attr21", "attr31" "attr32"]

Я также думаю об использовании apply(), как apply(myData, 1, func), но я не уверен, что func вставить.

InРезюме, как я могу построить распределение / плотность количества атрибутов?

Ответы [ 2 ]

3 голосов
/ 20 октября 2019

Вывод strsplit() представляет собой список, поэтому, если вам нужно количество элементов в каждом разбиении, вы должны использовать функцию *apply. Попробуйте это:

num_attr <- sapply(strsplit(x = myData$attribute, split = ','), length)

это применяется length() к каждому элементу списка (каждому разбиению) и возвращает вектор длины N (где N - количество строк в myData).

Если вы хотите num_attr как список, сделайте:

num_attr <- lapply(strsplit(x = myData$attribute, split = ','), length)
2 голосов
/ 20 октября 2019

Мы также можем посчитать число , в столбце «атрибут»

library(stringr)
str_count(myData$attribute, ",") + 1
#[1] 3 1 2

data

myData <- structure(list(name = c("Name1", "Name2", "Name3"), 
 attribute = c("attr11,attr12,attr13", 
"attr21", "attr31,attr32")), class = "data.frame", 
 row.names = c("1", 
"2", "3"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...