2016-01-07 4 views
-2

Я хочу удалить все нули из моего фрейма данных.удалить нули из фрейма данных

PRICES SALES PURCHASES MARGINAL RESIDUAL AMPDCH MW.PUMPED_B 
1:  81 1391.830 2061.830  Ccgt  1918  81 140.00000 
2:  81 1315.405 1985.405  Ccgt  1858  81 140.00000 
3:  81 1192.031 1862.031  Ccgt  1746  0  0.00000 
4:  81 1138.187 1747.216  Ccgt  1622  0  0.00000 
5:  81 1138.868 1666.639  Ccgt  1534  81 49.41176 
6:  81 1140.571 1628.348  Ccgt  1503  0  0.00000 

Я попытался с

df[ !rowSums(df[,colnames(df)[(3:ncol(df))]]==0)==ncol(df)-2, ] 

но нули еще в кадре данных. Кто-нибудь знает подходящее решение.

Ожидаемый результат выглядит так,

PRICES SALES PURCHASES MARGINAL RESIDUAL AMPDCH MW.PUMPED_B 
1  81 1391.830 2061.830  Ccgt  1918  81 140.00000 
2  81 1315.405 1985.405  Ccgt  1858  81 140.00000 
3  81 1138.868 1666.639  Ccgt  1534  81 49.41176 
+6

я запутался. что именно вы хотите? вы хотите удалить все строки с 0 в * любом столбце *? удалить все строки с нулями в определенном столбце? заменить нули другим значением? – bjoseph

+0

Вы хотите удалить строки с нулями? – akrun

+0

Я просто хочу удалить все строки с нулевыми значениями, так что finnaly у меня будет новый кадр данных без нулей. – aikod

ответ

0
# the same basic idea using "any" 
df[!apply(df[,6:7] == 0, 1, FUN = any, na.rm = TRUE),] 
# PRICES SALES PURCHASES MARGINAL RESIDUAL AMPDCH MW.PUMPED_B 
#1:  81 1391.830 2061.830  Ccgt  1918  81 140.00000 
#2:  81 1315.405 1985.405  Ccgt  1858  81 140.00000 
#5:  81 1138.868 1666.639  Ccgt  1534  81 49.41176 
2

Попробуйте

df1[!!rowSums(df1[, 6:7, with=FALSE])] 
#  PRICES SALES PURCHASES MARGINAL RESIDUAL AMPDCH MW.PUMPED_B 
#1:  81 1391.830 2061.830  Ccgt  1918  81 140.00000 
#2:  81 1315.405 1985.405  Ccgt  1858  81 140.00000 
#3:  81 1138.868 1666.639  Ccgt  1534  81 49.41176 
1

Вот простой, прозрачный раствор:

> df[-row(df)[df == 0],] 

    PRICES SALES PURCHASES MARGINAL RESIDUAL AMPDCH MW.PUMPED_B 
1:  81 1391.830 2061.830  Ccgt  1918  81 140.00000 
2:  81 1315.405 1985.405  Ccgt  1858  81 140.00000 
5:  81 1138.868 1666.639  Ccgt  1534  81 49.41176 
+0

Я бы, вероятно, обернул 'row (df) [df == 0]' с помощью 'unique()' там, чтобы избежать предупреждений. –