标签: splitstackshape

cSplit库(splitstackshape)总是丢弃列

我正在寻找一种通过分隔符拆分列内容并将表转换为长格式的方法.我cSplitsplitstackshape包中发现它几乎正在寻找我正在寻找的东西.

问题现在有了drop选项.我希望我的分割列能够以某种方式复制,但这不会发生.我做错了吗?有人遇到过这个问题吗?

我不确定我是否做错了什么,但该drop = FALSE选项在我的情况下不起作用.

这是一个例子:

library(splitstackshape)
jnk <- data.table(a = '1,2,3,4,5', b = 5)
jnk
#            a b
# 1: 1,2,3,4,5 5

cSplit(jnk, 'a', ',', 'long', drop = FALSE)
#    a b
# 1: 1 5
# 2: 2 5
# 3: 3 5
# 4: 4 5
# 5: 5 5
Run Code Online (Sandbox Code Playgroud)

我的期望是这样的:

cSplit(jnk, 'a', ',', 'long', drop = FALSE)
#    a b    a.orig
# 1: 1 5 1,2,3,4,5
# 2: …
Run Code Online (Sandbox Code Playgroud)

r splitstackshape

8
推荐指数
1
解决办法
4399
查看次数

使用R将单个柱分成多个观察

我正在研究HCUP数据,它在一个列中有一系列值,需要拆分成多列.以下是HCUP数据框供参考:

code            label
61000-61003     excision of CNS
0169T-0169T     ventricular shunt
Run Code Online (Sandbox Code Playgroud)

期望的输出应该是:

code            label
61000           excision of CNS
61001           excision of CNS
61002           excision of CNS
61003           excision of CNS
0169T           ventricular shunt
Run Code Online (Sandbox Code Playgroud)

我解决这个问题的方法是使用包splitstackshape并使用此代码

library(data.table)
library(splitstackshape)

cSplit(hcup, "code", "-")[, list(code = code_1:code_2, by = label)]
Run Code Online (Sandbox Code Playgroud)

这种方法会导致内存问题.有没有更好的方法来解决这个问题?

一些评论:

  • 除"T"之外,数据有许多字母.
  • 这封信可以在前面或最后但不在两个数字之间.
  • 在一个范围内,"T"到"U"的字母没有变化

r medical data.table data-cleaning splitstackshape

8
推荐指数
2
解决办法
1055
查看次数

使用sep ="." 来自"data.table"的`fread`

可以fread从"data.table"强制成功使用"."作为sep值吗?

我正试图在"splitstackshape"中fread加速我的concat.split功能.请参见本要点对我采取的一般方法,以及这个问题我为什么要作出这样的转变.

我遇到的问题是将dot(".")视为一个值sep.每当我这样做时,我都会收到"意外字符"错误.

以下简化示例演示了此问题.

library(data.table)

y <- paste("192.168.1.", 1:10, sep = "")

x1 <- tempfile()
writeLines(y, x1)
fread(x1, sep = ".", header = FALSE)
# Error in fread(x1, sep = ".", header = FALSE) : Unexpected character (
# 192) ending field 2 of line 1
Run Code Online (Sandbox Code Playgroud)

我在当前函数中使用的解决方法是替换"."原始数据中希望不存在的另一个字符"|",但是这对我来说似乎有风险,因为我无法预测其他人的数据集中的内容.这是行动中的解决方法.

x2 <- tempfile()
z <- gsub(".", "|", y, fixed=TRUE)
writeLines(z, …
Run Code Online (Sandbox Code Playgroud)

r fread data.table splitstackshape

7
推荐指数
1
解决办法
2514
查看次数

如何防止data.table强制数字变量进入字符变量而无需手动指定这些变量?

请考虑以下数据集:

dt <- structure(list(lllocatie = structure(c(1L, 6L, 2L, 4L, 3L), .Label = c("Assen", "Oosterwijtwerd", "Startenhuizen", "t-Zandt", "Tjuchem", "Winneweer"), class = "factor"), 
                 lat = c(52.992, 53.32, 53.336, 53.363, 53.368), 
                 lon = c(6.548, 6.74, 6.808, 6.765, 6.675), 
                 mag.cat = c(3L, 2L, 1L, 2L, 2L), 
                 places = structure(c(2L, 4L, 5L, 6L, 3L), .Label = c("", "Amen,Assen,Deurze,Ekehaar,Eleveld,Geelbroek,Taarlo,Ubbena", "Eppenhuizen,Garsthuizen,Huizinge,Kantens,Middelstum,Oldenzijl,Rottum,Startenhuizen,Toornwerd,Westeremden,Zandeweer", "Loppersum,Winneweer", "Oosterwijtwerd", "t-Zandt,Zeerijp"), class = "factor")),
            .Names = c("lllocatie", "lat", "lon", "mag.cat", "places"), 
            class = c("data.table", "data.frame"), 
            row.names = c(NA, -5L))
Run Code Online (Sandbox Code Playgroud)

当我想将最后一列中的字符串拆分为单独的行时,我使用(data.table版本1.9.5+): …

r data.table splitstackshape

5
推荐指数
2
解决办法
151
查看次数

R中的分层数据分割

我一直在使用caret::createDataPartition()以分层方式分割数据。现在我正在尝试我在堆栈中找到的另一种方法,即 ,splitstackshape::stratified()我对此感兴趣的原因是它允许根据我手动选择的功能进行分层,非常方便。

我在分割数据时遇到问题:

library(splitstackshape)

set.seed(40)
Train = stratified(Data, c('age','gender','treatment_1','treatment_2','cancers'), 0.75)
Run Code Online (Sandbox Code Playgroud)

这会产生训练集,但是如何获得测试集呢?我没明白。我createDataPartition一路累了:

INDEX = stratified(Data, c('age','gender','treatment_1','treatment_2','cancers'), 0.75)
Train = Data[INDEX , ]
Test = Data[-INDEX ,]
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为stratified创建的是实际的列车数据,而不是索引。

那么如何使用这个函数获取测试数据呢?谢谢!

r machine-learning caret splitstackshape

5
推荐指数
1
解决办法
663
查看次数

项目欧拉#22,关闭158,055

我目前正在解决Project Euler问题22,该问题有以下挑战:

使用names.txt(右键单击和"保存链接/目标为..."),一个包含超过五千个名字的46K文本文件,首先按字母顺序排序.然后计算每个名称的字母值,将该值乘以列表中的字母位置以获得名称分数.

例如,当列表按字母顺序排序时,值为3 + 15 + 12 + 9 + 14 = 53的COLIN是列表中的第938个名称.因此,COLIN将获得938×53 = 49714的分数.

文件中所有名称分数的总和是多少?

可以使用上面的链接下载该文件.我写了下面的代码来解决这个问题:

rm(list=ls())
library(splitstackshape)

#read in data from http://projecteuler.net/problem=22
names=sort(t(read.table("names.txt",sep=",")))

#letters to numbers conversion vectors
from=LETTERS[seq(1,26)]
to=as.character(seq(1,26))

#function to replace all letters with corresponding numbers
gsub2 = function(pattern, replacement, x, ...){
  for(i in 1:length(pattern))
    x = gsub(pattern[i],paste(replacement[i]," ",sep=""), x, ...)
  x
}

#create df, run function, create row number var for later calculation
df=data.frame(names=names)
df$name.num = gsub2(from,to,df$names)
df$rownum=seq(1,nrow(df))

#split letter …
Run Code Online (Sandbox Code Playgroud)

r splitstackshape

4
推荐指数
1
解决办法
360
查看次数

将不相关/类似的观察结果合并为一个(其他)

在对每个社区的感知问题进行调查后,我得到了这个数据帧.由于调查有不同的选择可供选择+一个开放的选项,因此公开问题的结果往往无关紧要(见下文):

library(dplyr)
library(splitstackshape)
df = read.csv("http://pastebin.com/raw.php?i=tQKHWMvL")

# Splitting multiple answers into different rows.
df = cSplit(df, "Problems", ",", direction = "long")

df = df %>%
  group_by(Problems) %>%
  summarise(Total = n()) %>%
  mutate(freq = Total/sum(Total)*100) %>%
  arrange(rank = desc(rank(freq)))
Run Code Online (Sandbox Code Playgroud)

导致此数据框:

> df
Source: local data table [34 x 3]

                       Problems Total       freq
1  Hurtos o robos sin violencia   245 25.6008359
2                        Drogas   232 24.2424242
3             Peleas callejeras   162 16.9278997
4               Ningún problema   149 15.5694880
5                    Agresiones    66  6.8965517
6 …
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr splitstackshape

3
推荐指数
1
解决办法
85
查看次数

将多个列拆分为多行

我正在处理一组非常原始的数据,需要对其进行整形才能使用它.我试图根据分隔符拆分选定的列'|'

d <- data.frame(id = c(022,565,893,415),
     name = c('c|e','m|q','w','w|s|e'), 
     score = c('e','k|e','e|k|e', 'e|o'))
Run Code Online (Sandbox Code Playgroud)

是否可以将数据帧拆分为一个,以便最终看起来像这样.

df <- data.frame(id = c(22,22,565,565,565,565,893,893,893,415,415,415,415,415,415),
            name = c('c','e','m','m','q','q','w','w','w','w','w','s','s','e','e'),
            score = c('e','e','k','e','k','e','e','k','e','e','o','e','o','e','o'))
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试了各种不同的字符串拆分功能,但没有太多运气:(

有人可以帮忙吗?

split r strsplit splitstackshape

3
推荐指数
1
解决办法
1172
查看次数