私の全体的な目標は、別の変数の値を条件にした特定の文字列を持つ複数の変数の1つから新しい変数に値を割り当てることです。より具体的には、R:別の列で条件付きの値を置き換えて変数名を一致させる
データフレームに複数の列を追加しようとしています(たとえば、 'foo'など)、データフレームに既に存在する2つの列のうちの1つの値をとります。 2つの接尾辞(例えば 'foo.2009'と 'foo.2014')のうちの1つを別の列(例えば '年')の値で条件付きで終了させます。データフレームには、この操作とは無関係の列も含まれており、これらは接尾辞の欠如によって識別されます(たとえば 'other_example'は '.2009'または'2014 'で終わらない)。新しい名前のベクトルを作成した列。以下の例のデータでは、foo
にfoo.2014
の値を割り当てたい場合は、year >=2014
とし、foo.2009
の場合はyear < 2014
とします。私の実際のデータで
# Original data frame
df <- data.frame(foo.2009 = seq(1,3),
foo.2014 = seq(5,7),
foo = NA,
bar = NA,
other_example = seq(20,22),
year = c(2014,2009,2014))
print(df)
# The vector of variable names ending in '.####`
names <- c("foo")
# Target data frame
df$foo <- c(5,2,7)
print(df)
、私はyear < 2014
場合、私はyear >= 2014
場合とbar == bar.2009
bar == bar.2014
をしたいfoo
に似た多くの変数(例えばbar
)を持っています。
# The vector of variable names ending in `.####`
names <- c("foo","bar")
# Original data frame
df <- data.frame(foo.2009 = seq(1,3),
foo.2014 = seq(5,7),
bar.2009 = seq(8,10),
bar.2014 = rep(5,3),
foo = NA,
bar = NA,
other_example = seq(20,22),
year = c(2014,2009,2014))
df
# Target data frame
df$foo <- c(5,2,7)
df$bar <- c(5,9,5)
df
:私はので、私は値を置き換えたい変数の任意の多数のための変数名(例えば
names
)のベクトルを通じて(または上のベクトル化操作を使用)私ができるソリューションループを開発しようとしています
私は、ループ内で変数名を含む複数の文字列を評価する必要があるか、ベクトル化されたアプローチを使用する必要性が特に問題になります。次は、dplyr :: mutate()を使用して変数を追加し、それらの値を割り当てようとする試みです。以下は、上記と同じデータですが、再コード化する追加変数の例を示しています。
library(dplyr)
for (i in names){
var09 <- paste0(i, ".2009")
var14 <- paste0(i, ".2014")
dplyr::mutate_(df,
i = ifelse(df$year < 2010,
paste0("df$",i, ".2009"),
paste0("df$",i, ".2014")))}
のシーケンスをループ保管しないでくださいすることができます。代わりにロングフォームに変更すると、これらの畳み込みを避けることができます。 – alistaire
残念ながら、私はこの形式で誰かにデータを提供しなければなりません。したがって、長い形式のデータを提供することはできません。 – QuestionAnswer
この解決策はあなたのために役立ちますhttp://stackoverflow.com/a/30271447/3893729 – MFR