1

私はこのようなデータフレームを持っています

>X_com
  Day_1 Day_2 Day_3 Day_4 Day_5 Day_6 Day_7 Day_8 Day_9 Day_10
1     0     0     0     0     0     0     0     0     0      1
2     0     0     0     0     0     0     0     0     0      0
3     0     0     0     0     0     0     0     0     0      0
4     0     0     0     0     0     0     0     0     0      0
5     0     0     0     0     0     0     0     0     0      0
6     0     0     0     0     0     0     0     0     0      0
7     0     0     0     0     0     0     0     0     0      0
8     0     0     0     0     0     0     0     0     0      0

すべての値を1つの列に集中させ、「1;」を含む別の列を追加する必要があります。だから私はこれをしました

> X_new=matrix(1,8,2)
> X_new[1,]=paste(X_com[1,1], X_com[1,2],X_com[1,3],X_com [1,4],X_com[1,5],X_com[1,6],X_com[1,7],X_com[1,8],X_com [1,9],X_com[1,10], sep="")
> X_new[2,]=paste(X_com[2,1], X_com[2,2],X_com[2,3],X_com [2,4],X_com[2,5],X_com[2,6],X_com[2,7],X_com[2,8],X_com [2,9],X_com[2,10], sep="")
> X_new[3,]=paste(X_com[3,1], X_com[3,2],X_com[3,3],X_com [3,4],X_com[3,5],X_com[3,6],X_com[3,7],X_com[3,8],X_com [3,9],X_com[3,10], sep="")
> X_new[4,]=paste(X_com[4,1], X_com[4,2],X_com[4,3],X_com [4,4],X_com[4,5],X_com[4,6],X_com[4,7],X_com[4,8],X_com [4,9],X_com[4,10], sep="")
> X_new[5,]=paste(X_com[5,1], X_com[5,2],X_com[5,3],X_com [5,4],X_com[5,5],X_com[5,6],X_com[5,7],X_com[5,8],X_com [5,9],X_com[5,10], sep="")
> X_new[6,]=paste(X_com[6,1], X_com[6,2],X_com[6,3],X_com [6,4],X_com[6,5],X_com[6,6],X_com[6,7],X_com[6,8],X_com [6,9],X_com[6,10], sep="")
> X_new[7,]=paste(X_com[7,1], X_com[7,2],X_com[7,3],X_com [7,4],X_com[7,5],X_com[7,6],X_com[7,7],X_com[7,8],X_com [7,9],X_com[7,10], sep="")
> X_new[8,]=paste(X_com[8,1], X_com[8,2],X_com[8,3],X_com [8,4],X_com[8,5],X_com[8,6],X_com[8,7],X_com[8,8],X_com [8,9],X_com[8,10], sep="")
> X_new[1:8,2]="1;"
> as.data.frame(X_new)
          V1 V2
1 0000000001 1;
2 0000000000 1;
3 0000000000 1;
4 0000000000 1;
5 0000000000 1;
6 0000000000 1;
7 0000000000 1;
8 0000000000 1;

これを達成するためのより速い方法は間違いなくあると思いますが、手がかりはありません。

もう1つの問題は、このようなデータフレームを1,000以上集中させる必要があることです。私はまだこれらの反復的なステップをループする方法を学んでいますが、非常にゆっくりと進んでいます。元のデータフレームに一意の名前が付けられている場合、それは、それぞれを個別に処理する以外に選択肢がないことを意味しますか?

4

3 に答える 3

2

問題の核心は次の方法で解決できますapply(x, 1, paste0, collapse = "")

例えば:

x <- as.data.frame(matrix(sample(0:1, 100, TRUE), ncol = 10))
apply(x, 1, paste0, collapse = "")
####
 [1] "1010001111" "1110001101" "1100100000" "0111000110" "0111101000" "0101100100"
 [7] "1110100110" "1001100010" "1101111011" "1101001111"

これには多くの data.frames があるように聞こえるので、これを関数に入れたいと思うかもしれませんlapply:

foo <- function(data, val) {
  collapse <- apply(data, 1, paste0, collapse = "")
  out <- data.frame(collapse, val)
  return(out)
  }

> foo(x,1)
     collapse val
1  1010001111   1
2  1110001101   1
3  1100100000   1
----
于 2012-08-29T02:48:01.580 に答える
0

これに関する速度については保証しません。

dat <- read.table(text = " Day_1 Day_2 Day_3 Day_4 Day_5 Day_6 Day_7 Day_8 Day_9 Day_10
+ 1     0     0     0     0     0     0     0     0     0      1
+ 2     0     0     0     0     0     0     0     0     0      0
+ 3     0     0     0     0     0     0     0     0     0      0
+ 4     0     0     0     0     0     0     0     0     0      0
+ 5     0     0     0     0     0     0     0     0     0      0
+ 6     0     0     0     0     0     0     0     0     0      0
+ 7     0     0     0     0     0     0     0     0     0      0
+ 8     0     0     0     0     0     0     0     0     0      0",header = TRUE,sep = "")
> data.frame(V1 = apply(dat,1,paste0,collapse = ""),V2 = "1;")
          V1 V2
1 0000000001 1;
2 0000000000 1;
3 0000000000 1;
4 0000000000 1;
5 0000000000 1;
6 0000000000 1;
7 0000000000 1;
8 0000000000 1;
于 2012-08-29T02:45:51.443 に答える
0

元の質問を投稿しましたが、誤ってそのアカウントを削除してしまいました。したがって、回答についてコメントすることはできません。

ただありがとうと言いたい。

また、「paste0」を「paste」に置き換える必要があるコードの一部を編集する必要があると思いますか?

collapse <- apply(data, 1, paste, collapse = "")

また、必要な最後の列は「1:」であり、作成した関数は次のようにも機能します。

> foo(x, "1;")
     collapse val
1  0010111000  1;
2  0000110001  1;
3  1100100101  1;
4  1100011100  1;
5  1111001101  1;
6  1100000111  1;
7  0001001001  1;
8  1110000011  1;
9  1011011101  1;
10 1111111000  1;

どうもありがとう。

于 2012-08-29T03:30:34.213 に答える