1

私は R を初めて使用し、17 列と 100 万行を超える大きなデータセットを持っています。列の 1 つを区切り記号「/」で 4 つに分割したいと考えています。Rが以下のコマンドを完了するのに永遠にかかります。以下を完了するためのより良い方法はありますか。できるだけ多くのコード情報を提供しましたので、ご協力いただければ幸いです。

sample2 <- read.csv("week1.csv", header=TRUE)
summ1 <- subset(sample2,select= -c(3,7), subset =(SPORTS_ID =='1'))
summ1 <- summ1[,-c(1)]
library(splitstackshape)
summ2 <- concat.split.multiple(summ1,2 , "/")
summ2 <- summ2[,-c(1,15)]
summ3 <- concat.split.multiple(summ2,14, "v")
write.csv(summm3, file="test.csv")
4

4 に答える 4

1

使用できますstrsplit

dat <- data.frame(a = c("a/b/c/d",
                        "e/f/g/h"),
                  stringsAsFactors = FALSE)
#         a
# 1 a/b/c/d
# 2 e/f/g/h

cbind(dat, do.call(rbind, strsplit(dat$a, "/")))
#         a 1 2 3 4
# 1 a/b/c/d a b c d
# 2 e/f/g/h e f g h
于 2014-03-07T15:30:36.513 に答える
0

これで始められるはずです。データの内容に応じて、正規表現パターンを調整する必要がある場合があります。再現可能な例が役立ちます。 R で再現可能な優れた例を作成するにはどうすればよいですか?

library(stringr)
df <- as.data.frame(cbind(x = seq(1,10,1), y = rep("first/second", 10)), stringsAsFactors = FALSE)
df
df$first <- str_replace(df$y, "\\/\\w+", "")
df$second <- str_replace(df$y, "\\w+\\/", "")
df

> df
    x            y first second
1   1 first/second first second
2   2 first/second first second
3   3 first/second first second
4   4 first/second first second
5   5 first/second first second
6   6 first/second first second
7   7 first/second first second
8   8 first/second first second
9   9 first/second first second
10 10 first/second first second
于 2014-03-07T15:05:07.367 に答える
0

キャラクターを扱い、リストを気にしない場合は、パッケージstr_split内で 役立つはずですstringr

library(stringr)
x <- 'hello/hi/hey/hola'
str_split(x)
[[1]]
[1] "hello" "hi" "hey" "hola" 
于 2014-03-07T15:08:03.033 に答える