によって上書きされているにもdf$2nd <= 6
です。 transform()
は論理インデックス方法よりも低速で実行されますが、コードの目的をより簡単に把握することができます。さまざまな方法の賛否両論の良い議論はhereで見つけることができます。考えてみましょう:
set.seed(42)
df <- data.frame("first" = sample(1:5, 10e5, TRUE), "second" = sample(4:8, 10e5, TRUE))
df <- transform(df
, test = ifelse(first %in% 1:3 & second == 4, 1
, ifelse(first %in% 1:3 & second == 5, 2
, ifelse(first %in% 1:3 & second == 6, 3, NA)))
)
第二に、列名1st
と2nd
が構文的に有効な列名ではありません。有効な列名を構成する要素の詳細については、make.names()
を参照してください。 data.frame
で作業する場合は、check.names
引数を使用するか乱用できます。例:
> df <- data.frame("1st" = sample(1:5, 10e5, TRUE), "2nd" = sample(4:8, 10e5, TRUE), check.names = FALSE)
> colnames(df)
[1] "1st" "2nd"
> df <- data.frame("1st" = sample(1:5, 10e5, TRUE), "2nd" = sample(4:8, 10e5, TRUE), check.names = TRUE)
> colnames(df)
[1] "X1st" "X2nd"
ありがとう、aix!問題は確かに1:3でした。それをスペルアウトしました。参照のために+1 – dw006
+1。 – Marek