1

次のデータ (myinput.txt) が与えられた場合:

A  q,y,h
B  y,f,g
C  n,r,q
### more rows

Rでそのようなデータ構造に変換するにはどうすればよいですか?

$A
 [1] "q" "y" "h" 
$B
 [1] "y" "f" "g"
$C
 [1] "n" "r" "q" 
4

2 に答える 2

4

これをあなたのデータとして想定しました:

dat <- read.table(text="q,y,h
y,f,g
n,r,q", header=FALSE, sep=",", row.names=c("A", "B", "C"))

自動メソッドが必要な場合:

as.list(as.data.frame((t(dat)), stringsAsFactors=FALSE))

## $A
## [1] "q" "y" "h"
##
## $B
## [1] "y" "f" "g"
## 
## $C
## [1] "n" "r" "q"

機能する別の方法は次のとおりです。

lapply(apply(dat, 1, list), "[[", 1)

unlist(apply(dat, 1, list), recursive=FALSE)
于 2013-02-15T04:22:08.353 に答える
0

少しのreadLines strsplitと 正規表現を使用して、最初から名前を分割することを説明します。

dat <- readLines(textConnection("A  q,y,h
B  y,f,g
C  n,r,q"))

result <- lapply(strsplit(dat,"\\s{2}|,"),function(x) x[2:length(x)])
names(result) <- gsub("^(.+)\\s{2}.+$","\\1",dat)

> result
$A
[1] "q" "y" "h"

$B
[1] "y" "f" "g"

$C
[1] "n" "r" "q"

またはより少ない正規表現とより多くのステップで:

result <- strsplit(dat,"\\s{2}|,")
names(result) <- lapply(result,"[",1)
result <- lapply(result,function(x) x[2:length(x)])

> result
$A
[1] "q" "y" "h"

$B
[1] "y" "f" "g"

$C
[1] "n" "r" "q"
于 2013-02-15T05:06:52.710 に答える