2016-04-08 13 views
0

dfの指定された列のすべての行の値を計算するデータフレーム(df)、列名のベクトル(foo)、関数(spaces) 。 I以下を達成しようとしています:R:エラー:予期しない '=' in

  1. 入力としてプライベートFOOを空白に
  2. スペース各列スペースの場合DF
  3. の列名に一致するfooというの各要素に対して動作に動作し、出力を保存します元の列の名前と ".counts"を連結した列名を持つdfの新しい列のスペース。

私はエラーを受信し続ける:

以下
> Error: unexpected '=' in: 
>"  new[i] <- paste0(foo[i],".count") # New variable name 
> data <- transform(data, new[i] =" 
> } 
> Error: unexpected '}' in " }" 

は私のコードです。注:空白は、df $ xという形式の単一の変数の入力が提供されたときに必要なものですが、transform()を使用すると各変数の接頭辞df $を除外することができます。

# Create data for example 
a <- c <- seq(1:5) 
b <- c("1","1 2", "1 2 3","1 2 3 4","1 2 3 4 5") 
d <- 10 
df <- data.frame(a,b,c,d) # data fram df 
foo <- c("a","b") # these are the names of the columns I want to provide to spaces 

# Define function: spaces 
spaces <- function(s) { sapply(gregexpr(" ", s), function(p) { sum(p>=0) }) } 

# Initialize vector with new variable names 
new <- vector(length = length(foo)) 

# Create loop with following steps: 
    # (1) New variable name 
    # (2) Each element (e.g. "x") of foo is fed to spaces 
    #  a new variable (e.g. "x.count") is created in df, 
    #  this new df overwrites the old df 

for (i in 1:length(foo)) { 
    new[i] <- paste0(foo[i],".count") # New variable name 
    df <- transform(df, new[i] = spaces(foo[i])) # Function and new df 
} 

答えて

1

transform(df, new[i] = spaces(foo[i]))は有効な構文ではありません。引数名はインデックスで呼び出すことはできません。一時的な文字列を作成して使用します。

for (i in 1:length(foo)) { 
    new[i] <- paste0(foo[i],".count") # New variable name 
    tmp <- paste0(new[i], ".counts") 
    df <- transform(df, tmp = spaces(foo[i])) # Function and new df 
} 
+0

これは「tmp」という名前の新しい列を作成しますが、(1)新しい列の名前を次のように変更します。古い列xの場合、新しい列はx.counts、つまりc(x、 ".counts")。 (2)列が0の束を生成しています。私は、bを最終的に非ゼロ値を生成すべきベクトルに変更することによってこの例を編集しました。 – user3614648

+0

@ user3614648これは簡単です。文字列を連結するには、関数のいずれかを使用します。私は 'paste0'を使いました。 –

関連する問題