0

国に応じて、「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 列を正しく更新していません。私は何を間違っていますか?また、これはデータフレームの更新を達成するための最良の方法ですか?

4

1 に答える 1

5

ifelseここで実際に欲しいもののようです。これは、if/else コンストラクトのベクトル化されたバージョンです。

 clients$CountryType <- ifelse(clients$Country == "US", "US", "Foreign")
于 2012-10-05T15:18:12.443 に答える