0

私は R に非常に慣れていないので、今までできなかったことをするためにあなたの助けが必要です:

乱数の列を持つことができるデータ フレームがあります。データ フレームの各列に一意の値のみを保持する必要がありますが、これは他の列とは無関係に行う必要があります。

たとえば、以下のデータ フレームがあるとします。

 Column_A   Column_B    Column_C
    A               1           A1  
    A               2           A2
    B               1           A3
    B               2           A4
    C               3           A5
    C               4           A6

コードの後のこの出力は次のようになります。

Column_A    Column_B    Column_C
A               1           A1
B               2           A2
C               3           A3
                4           A4
                            A5
                            A6

試してみましds <- unique(ds)たが、すべての列間の一意の関係のみが残ります。

あなたが私に与えてくれた助けやオリエンテーションに本当に感謝しています。

前もって感謝します。

データ

`> str(df)
'data.frame':   6 obs. of  3 variables:
 $ A: chr  "A" "B" "C" "A" ...
 $ B: num  1 2 1 2 3 4
 $ C: chr  "A1" "A2" "A3" "A4" ...`

ループ

`i <- 1`
`while (i < ncol(df)){
+  df[i] <-  lapply(df, function(x) {
+           x[duplicated(x)] <- ''
+           c(x[x!=''], x[x==''])})
+ i <- i+1
+}`
4

1 に答える 1

1

「因子」列がある場合は、変換するか、列のレベルの 1 つcharacterとして含めることをお勧めします。ここでは、列を最初に変更しています。''factorfactorcharacter

 indx <- sapply(df1, is.factor)
 df1[indx] <- lapply(df1[indx], as.character) 

で列をループし、要素をlapplyで置き換え、空の文字列が最後になるように要素を配置します ( )duplicated''c(x[x=''],x==''])

 df1[] <-  lapply(df1, function(x) {
           x[duplicated(x)] <- ''
           c(x[x!=''], x[x==''])})
 df1
 #   Column_A Column_B Column_C
 #1        A        1       A1
 #2        B        2       A2
 #3        C        3       A3
 #4                 4       A4
 #5                         A5
 #6                         A6

または別のオプションを使用することですmatch

df1[] <- lapply(df1, function(x) c(x[match(unique(x),x)],
               rep('', length(x)-length(unique(x)))))

注: を使用''すると、数値列クラスが「文字/因子」クラスに変更されます。カスタム機能などNAでも簡単に削除できるものに交換した方が良いかもしれません。is.na/na.omit/complete.cases

データ

 df1 <- structure(list(Column_A = structure(c(1L, 1L, 2L, 2L, 3L, 3L), 
 .Label = c("A", 
 "B", "C"), class = "factor"), Column_B = c(1L, 2L, 1L, 2L, 3L, 
 4L), Column_C = structure(1:6, .Label = c("A1", "A2", "A3", "A4", 
 "A5", "A6"), class = "factor")), .Names = c("Column_A", "Column_B", 
 "Column_C"), row.names = c(NA, -6L), class = "data.frame")
于 2015-07-10T19:49:01.677 に答える