3

同じ長さNの 2 つの列 (おそらくデータ フレームから) が与えられた場合、最初の列の奇数エントリと 2 番目の列の偶数エントリを含む長さ2Nの列を作成するにはどうすればよいですか?

次のデータフレームがあるとします

df.1 <- data.frame(X = LETTERS[1:10], Y = 2*(1:10)-1, Z = 2*(1:10))

このデータ フレームを作成するにはどうすればよいdf.2ですか?

i <- 1
j <- 0
XX <- NA
while (i <= 10){
XX[i+j] <- LETTERS[i]
XX[i+j+1]<- LETTERS[i]
i <- i+1
j <- i-1
}

df.2 <- data.frame(X.X = XX, Y.Z = c(1:20))
4

6 に答える 6

4

ggplot2これを行う非エクスポート関数interleaveがあります。

エクスポートされていませんが、ヘルプ ページ ( ?ggplot2:::interleave)があります。

with(df.1, ggplot2:::interleave(Y,Z))
## [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
于 2013-04-23T01:56:38.623 に答える
1

melt次から使用できますreshape2

library(reshape2)
foo <- melt(df.1, id.vars='X')

> foo
   X variable value
1  A        Y     1
2  B        Y     3
3  C        Y     5
4  D        Y     7
5  E        Y     9
6  F        Y    11
7  G        Y    13
8  H        Y    15
9  I        Y    17
10 J        Y    19
11 A        Z     2
12 B        Z     4
13 C        Z     6
14 D        Z     8
15 E        Z    10
16 F        Z    12
17 G        Z    14
18 H        Z    16
19 I        Z    18
20 J        Z    20

次に、必要な列を並べ替えて選択できます。

foo[order(foo$X), c('X', 'value')]
于 2013-04-23T01:37:55.453 に答える
1

ベースRを使用した別のソリューション.

まず、ベクトルを使用して data.frame の文字ベクトルにインデックスを付け、[1,1,2,2 ... 10,10]として保存しX.Xます。次に、rbinddata.frame ベクトルをY&Z効果的に「圧縮」して、 に保存しY.Xます。

> res <- data.frame(
+   X.X = df.1$X[c(rbind(1:10, 1:10))],
+   Y.Z = c(rbind(df.1$Y, df.1$Z))
+ )
> head(res)
  X.X Y.Z
1   A   1
2   A   2
3   B   3
4   B   4
5   C   5
6   C   6
于 2013-04-23T03:37:26.913 に答える
0

最初の段落で要求したものが必要であり、投稿した残りの部分がそれを解決しようとする試みであると仮定します。

a=df.1[df.1$Y%%2>0,1:2]
b=df.1[df.1$Z%%2==0,c(1,3)]
names(a)=c("X.X","Y.Z")
names(b)=names(a)
df.2=rbind(a, b)

例に示すように XX でグループ化する場合は、次のようにします。

library(plyr)
arrange(df.2, X.X)
于 2013-04-23T02:06:44.303 に答える