0

すべての観測値が同じ値を持つデータフレームの列を分離しようとしています (NA を無視します)。架空の例については、以下を参照してください。

ForestName <- rep("Planige", 4)
TreeNumber <- c(1:4)
Height <- c(2.3, 2, 2.1, 2.9)
Type <- c("AA", "AA", NA, "AA")
df <- data.frame(ForestName, TreeNumber, Height, Type)
df

新しいデータフレームには、ForestName と Type が含まれている必要があります。値が等しくない列 (TreeNumber と Height) は、別のデータフレームに含める必要があります。

4

3 に答える 3

2

uniqueこれを使用して、これが単一の要素に減少するかどうかを確認できます。

df[sapply(df,function(x) length(unique(x[!is.na(x)])))==1]
  ForestName Type
1    Planige   AA
2    Planige   AA
3    Planige <NA>
4    Planige   AA

または、要素が最初の非:allに等しいことをテストします。NA

df[sapply(df, function(x) all(x==na.omit(x)[1],na.rm=T))]
  ForestName Type
1    Planige   AA
2    Planige   AA
3    Planige <NA>
4    Planige   AA
于 2012-09-21T13:50:13.810 に答える
1

他の多くの方法の中で、私は確信しています:

df[,sapply(df,function(x) {length(unique(x[!is.na(x)])) > 1})]

   TreeNumber Height
1          1    2.3
2          2    2.0
3          3    2.1
4          4    2.9

また、式を否定しsapplyて他の列を取得することもできます。

于 2012-09-21T13:49:36.683 に答える
0

同じ基本原理を使用したもう少しコンパクトなアプローチ

 Filter(function(x){length(unique(x[!is.na(x)])) <=1}, df)
于 2012-09-25T06:43:21.680 に答える