2016-12-22 9 views
0

私は大きいリストに分割されたデータフレームdfを持っています。そして、値(numtake)に基づいてリストの要素を変更したいので、以下の各リスト要素例では、私はadavnce内の最初の行のためにnumtake = 2などリスト要素を編集する

$TH.9990.1 
      Init Monthly Dlr Cls.Accoun Cur.Balance meandiff numtake 
12920  TH  1 9990 502-******  3949.85 48.30333  1 
12921  TH  1 9990 502-******  4112.69 211.14333  1 
12922  TH  1 9990 502-******  3642.10 259.44667  1 

$VAF.9990.1 
      init Monthly Dlr Cls.Accoun Cur.Balance meandiff numtake 
13834  VAF  1 9990 502-******  2600.24 78.7925  2 
13835  VAF  1 9990 502-******  3618.78 939.7475  2 
13836  VAF  1 9990 502-******  4337.44 1658.4075  2 
13837  VAF  1 9990 502-******  159.67 2519.3625  2 

場合numtake = 1の場合と最初の2行をありがとうを初期値に「新」に変更したいと思います!

私はこのベースR液が出て動作するはずだと思う
+0

あなたが何をすべきかについて、より良い方向を受け取るために作られている任意のコードの試みを共有してください。 – JJFord3

答えて

0

lapply(myList, function(x) within(x, Init[seq_len(numtake[1])] <- rep("new", numtake[1]))) 

$TH.9990.1 
     Init Monthly Dlr Cls.Accoun Cur.Balance meandiff numtake  val 
12920 new  1 9990 502-******  3949.85 48.30333  1 TH.9990.1 
12921 TH  1 9990 502-******  4112.69 211.14333  1 TH.9990.1 
12922 TH  1 9990 502-******  3642.10 259.44667  1 TH.9990.1 

$VAF.9990.1 
     Init Monthly Dlr Cls.Accoun Cur.Balance meandiff numtake  val 
13834 new  1 9990 502-******  2600.24 78.7925  2 VAF.9990.1 
13835 new  1 9990 502-******  3618.78 939.7475  2 VAF.9990.1 
13836 VAF  1 9990 502-******  4337.44 1658.4075  2 VAF.9990.1 
13837 VAF  1 9990 502-******  159.67 2519.3625  2 VAF.9990.1 

numtakeの最初の観察を選択するように​​に繰り返される「新しい」割り当ての値だけでなく、引数の数を選択するために使用されますInit変数での置換に使用する要素値。 withinは入力を減らし、変更されたdata.frameおよびlapplyループをリストに戻します。

データ

structure(list(TH.9990.1 = structure(list(Init = c("TH", "TH", 
"TH"), Monthly = c(1L, 1L, 1L), Dlr = c(9990L, 9990L, 9990L), 
    Cls.Accoun = c("502-******", "502-******", "502-******"), 
    Cur.Balance = c(3949.85, 4112.69, 3642.1), meandiff = c(48.30333, 
    211.14333, 259.44667), numtake = c(1L, 1L, 1L), val = c("TH.9990.1", 
    "TH.9990.1", "TH.9990.1")), .Names = c("Init", "Monthly", 
"Dlr", "Cls.Accoun", "Cur.Balance", "meandiff", "numtake", "val" 
), row.names = c("12920", "12921", "12922"), class = "data.frame"), 
    VAF.9990.1 = structure(list(Init = c("VAF", "VAF", "VAF", 
    "VAF"), Monthly = c(1L, 1L, 1L, 1L), Dlr = c(9990L, 9990L, 
    9990L, 9990L), Cls.Accoun = c("502-******", "502-******", 
    "502-******", "502-******"), Cur.Balance = c(2600.24, 3618.78, 
    4337.44, 159.67), meandiff = c(78.7925, 939.7475, 1658.4075, 
    2519.3625), numtake = c(2L, 2L, 2L, 2L), val = c("VAF.9990.1", 
    "VAF.9990.1", "VAF.9990.1", "VAF.9990.1")), .Names = c("Init", 
    "Monthly", "Dlr", "Cls.Accoun", "Cur.Balance", "meandiff", 
    "numtake", "val"), row.names = c("13834", "13835", "13836", 
    "13837"), class = "data.frame")), .Names = c("TH.9990.1", 
"VAF.9990.1")) 
+0

これは、作成したデータを使用するときに機能しますが、リストに適用すると、NAを正しい場所に置いていますが、「新規」ではなくNAが生成されます。 –

+0

おそらく、Initカラムはfactorカラムです。あなたはそれを性格を強要するべきです。これを行う最も簡単な方法は、関数の 'read.'ファミリで' as.is = TRUE'を使うことです。それ以外の場合は、data.frameを分割する前に 'df $ Init < - as.character(df $ Init)'を使用してください。 – lmo

+0

これはまさにそれです、ありがとう! –

関連する問題