Nano Hash - криптовалюты, майнинг, программирование

Разделение столбца таблицы данных

Интересно, как разделить столбец таблицы данных.

Можно легко разделить столбец data.frame с помощью следующего кода:

df <- data.frame(Test=c("A - B", "C - D"))
df
     Test
1 A - B
2 C - D
library(reshape2)
reshape2:::colsplit(string = df[,1], pattern = " ", names = c("Var1", "Space", "Var2"))

  Var1 Space Var2
1    A     -    B
2    C     -    D

Но моя попытка разбить столбец data.table не удалась

library(data.table)
dt <- data.table(Test=c("A - B", "C - D"))
dt
    Test
1: A - B
2: C - D
reshape2:::colsplit(string = dt[,1, with=FALSE], pattern = " ", names = c("Var1", "Space", "Var2"))
Error: String must be an atomic vector

  • Попробуйте string = dt[[1]] 20.09.2014
  • Спасибо @Arun за вашу помощь. Не могли бы вы изменить свой комментарий, чтобы ответить и объяснить логику [[1]]. Спасибо 20.09.2014
  • @MYaseen208, просто используйте class, чтобы понять это. Короче говоря, когда вы делаете df[,1], он становится вектором (больше не data.frame), однако когда вы делаете dt[,1, with=FALSE], это все еще data.table. В ошибке colsplit четко указано, что вы должны дать ему атомарный вектор, поэтому для этого вы делаете dt[[1]] 20.09.2014

Ответы:


1

Я вижу, что вы специально просите что-то с colsplit, но я бы посоветовал посмотреть некоторые другие альтернативы, например мою функцию cSplit.

Подход cSplit будет следующим:

setnames(cSplit(dt, "Test",  " "), c("Var1", "Space", "Var2"))[]
#    Var1 Space Var2
# 1:    A     -    B
# 2:    C     -    D

[] в конце предназначено для печати результата, но вы также можете просто сохранить результат как новый data.table.


Как он соотносится с точки зрения эффективности?

fun1 <- function() {
  reshape2:::colsplit(string = dt[[1]], pattern = " ", 
                      names = c("Var1", "Space", "Var2"))
} 
fun2 <- function() {
  setnames(cSplit(dt, "Test",  " "), 
           c("Var1", "Space", "Var2"))[]
}

dt <- rbindlist(replicate(5000, dt, FALSE))
dim(dt)
# [1] 10000     1

library(microbenchmark)
microbenchmark(fun1(), fun2(), times = 10)
# Unit: milliseconds
#    expr        min         lq     median         uq        max neval
#  fun1() 2025.84703 2093.39687 2195.75822 2390.30666 2492.65946    10
#  fun2()   34.08966   36.01145   43.28036   47.45962   57.57615    10

Почему ваш colsplit подход не сработал так, как вы ожидали?

dt[,1] больше похоже на df[,1, drop = FALSE] (попробуйте - вы получите ту же ошибку, что и при попытке "data.table").

Вам понадобится одно из следующего:

> dt[[1]]
[1] "A - B" "C - D"
> dt$Test
[1] "A - B" "C - D"

Что похоже на то, что вы получаете:

> df[, 1]
[1] A - B C - D
Levels: A - B C - D
21.09.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..