国に応じて、「US」または「Foreign」のいずれかに等しいデータフレームの列を設定しようとしています。これを行う適切な方法は、関数を記述してsapply
から、実際にデータフレームを更新することだと思います。でこのようなことを試みたのはこれが初めてR
で、クエリ SQL
を書いただけです。UPDATE
ここに私のデータフレームがあります:
str(clients)
'data.frame': 252774 obs. of 4 variables:
$ ClientID : Factor w/ 252774 levels "58187855","59210128",..: 19 20 21 22 23 24 25 26 27 28 ...
$ Country : Factor w/ 207 levels "Afghanistan",..: 196 60 139 196 196 40 40 196 196 196 ...
$ CountryType : chr "" "" "" "" ...
$ OrderSize : num 12.95 21.99 5.00 7.50 44.5 ...
head(clients)
ClientID Country CountryType OrderSize
1 58187855 United States 12.95
2 59210128 France 21.99
3 65729284 Pakistan 5.00
4 25819711 United States 7.50
5 62837458 United States 44.55
6 88379852 China 99.28
私が書こうとした関数はこれです:
updateCountry <- function(x) {
if (clients$Country == "US") {
clients$CountryType <- "US"
} else {
clients$CountryType <- "Foreign"
}
}
次に、次のように適用します。
sapply(clients, updateCountry)
sapply
データフレームの先頭に対して実行すると、次のようになります。
"US" "US" "US" "US" "US" "US"
Warning messages:
1: In if (clients$Country == "United States") { :
the condition has length > 1 and only the first element will be used
2: In if (clients$Country == "United States") { :
the condition has length > 1 and only the first element will be used
3: In if (clients$Country == "United States") { :
the condition has length > 1 and only the first element will be used
4: In if (clients$Country == "United States") { :
the condition has length > 1 and only the first element will be used
5: In if (clients$Country == "United States") { :
the condition has length > 1 and only the first element will be used
6: In if (clients$Country == "United States") { :
the condition has length > 1 and only the first element will be used
関数は Country を正しく分類しているように見えますが、clients$CountryType 列を正しく更新していません。私は何を間違っていますか?また、これはデータフレームの更新を達成するための最良の方法ですか?