我有這樣一個從數據幀
1 1 1 K 1 K K
2 1 2 K 1 K K
3 8 3 K 1 K K
4 8 2 K 1 K K
1 1 1 K 1 K K
2 1 2 K 1 K K
我要刪除所有使用相同的值,即k爲列的數據幀中移除具有相同值的列,所以我的結果會是怎樣這
1 1 1 1
2 1 2 1
3 8 3 1
4 8 2 1
1 1 1 1
2 1 2 1
我嘗試在列中迭代,但我沒有得到任何東西。有任何想法嗎?在此先感謝
我有這樣一個從數據幀
1 1 1 K 1 K K
2 1 2 K 1 K K
3 8 3 K 1 K K
4 8 2 K 1 K K
1 1 1 K 1 K K
2 1 2 K 1 K K
我要刪除所有使用相同的值,即k爲列的數據幀中移除具有相同值的列,所以我的結果會是怎樣這
1 1 1 1
2 1 2 1
3 8 3 1
4 8 2 1
1 1 1 1
2 1 2 1
我嘗試在列中迭代,但我沒有得到任何東西。有任何想法嗎?在此先感謝
要選擇一個以上的值列不論類型:
uniquelength <- sapply(d,function(x) length(unique(x)))
d <- subset(d, select=uniquelength>1)
?
(哎呀,羅馬的問題是正確的 - 這可能擊敗你的5列以及)
也許(編輯:感謝評論!)
isfac <- sapply(d,inherits,"factor")
d <- subset(d,select=!isfac | uniquelength>1)
或
d <- d[,!isfac | uniquelength>1]
您的子集不適合我。也許'd [,!isfac | uniquelength!= 1]'? –
它不適合我!我看到完全相同的 – user976991
......我現在「記住」('?subset'),'subset'在_rows_上工作。爲了避免這種情況,應該明確指定'select',所以'subset(d,select =!isfac | uniquelength> 1)'。 @ user976991,試試。 –
另一種方法是使用高階函數Filter
。下面是代碼
to_keep <- function(x) any(is.numeric(x), length(unique(x)) > 1)
Filter(to_keep, d)
下面是會工作以除去任何複製的列的溶液(包括,例如,對複製的字符,數字,或因子的列)。這就是我閱讀OP的問題,即使是誤讀,這也是一個有趣的問題。
df <- read.table(text="
1 1 1 K 1 K K
2 1 2 K 1 K K
3 8 3 K 1 K K
4 8 2 K 1 K K
1 1 1 K 1 K K
2 1 2 K 1 K K")
# Need to run duplicated() in 'both directions', since it considers
# the first example to be **not** a duplicate.
repdCols <- as.logical(duplicated(as.list(df), fromLast=FALSE) +
duplicated(as.list(df), fromLast=TRUE))
# [1] FALSE FALSE FALSE TRUE FALSE TRUE TRUE
df[!repdCols]
# V1 V2 V3 V5
# 1 1 1 1 1
# 2 2 1 2 1
# 3 3 8 3 1
# 4 4 8 2 1
# 5 1 1 1 1
# 6 2 1 2 1
Oneliner解決方案。
df2 <- df[sapply(df, function(x) !is.factor(x) | length(unique(x))>1)]
解決方案是否應包含數字以及字符/因子? –
是的,沒錯, – user976991