Podczas pracy z ramkami danych często potrzebny jest podzbiór. Jednak korzystanie z funkcji podzbioru jest odradzane. Problem z następującym kodem polega na tym, że nazwa ramki danych jest powtarzana dwukrotnie. Jeśli skopiujesz kod & i munge, łatwo jest przypadkowo nie zmienić drugiej wzmianki o adf, która może być katastrofą.W R subsetowanie bez użycia podzbioru() i użyć [w bardziej zwięzły sposób, aby zapobiec literówek?
adf=data.frame(a=1:10,b=11:20)
print(adf[which(adf$a>5),]) ##alas, adf mentioned twice
print(with(adf,adf[{a>5},])) ##alas, adf mentioned twice
print(subset(adf,a>5)) ##alas, not supposed to use subset
Czy istnieje sposób, aby napisać powyższe, nie wspominając o adf dwa razy? Niestety w przypadku funkcji with() lub within() nie mogę uzyskać dostępu do adf jako całości?
Funkcja podzbiór (...) mógłby zrobić to łatwe, ale ostrzegają, aby nie używać go:
Jest to funkcja wygoda przeznaczone do użytku interaktywnie. Do programowania lepiej używać standardowych funkcji podsekcji takich jak [, a w szczególności nietypowa ocena podzbioru argumentów może mieć nieprzewidziane konsekwencje.
Używanie 'filtru' z' dplyr'. tj. "filter (adf, a> 5)" jest podobne do "podzbioru". Jeśli używasz 'data.table'. 'setDT (adf) [a> 5]' – akrun
Jestem tutaj z @akrun i przestałem używać 'data.frames' dawno temu. Po przekonwertowaniu zestawu danych na "data.table" cała składnia stanie się znacznie krótsza. Chociaż chcę tylko wspomnieć, że używasz tutaj zbyt wiele kodu. Nie potrzebujesz 'print' lub' which', po prostu 'adf [adf $ a> 5,]' zrobi to, co z kolei nie będzie dla mnie zbyt mylące. –
Jeśli chcesz wiedzieć, dlaczego użycie 'subset()' nie jest zalecane, proszę spojrzeć [to pytanie SO] (http://stackoverflow.com/questions/9860090/in-r-why-is- lepiej niż podzbiór). – MERose