1

R で空のセルをゼロ (0) に置き換える必要があります。次のようなデータ フレームがあります。

dput(df)

structure(list(CHANNEL = structure(c(1L, 1L, 1L), .Label = "Native BlackBerry App", class = "factor"), 
    DATE = structure(c(1L, 1L, 1L), .Label = "01/01/2011", class = "factor"), 
    HOUR = structure(c(3L, 1L, 2L), .Label = c("1:00am-2:00am", 
    "2:00am-3:00am", "Midnight-1:00am"), class = "factor"), UNIQUE_USERS = structure(c(1L, 
    1L, 1L), .Label = "", class = "factor"), LOGON_VOLUME = structure(c(1L, 
    1L, 1L), .Label = "", class = "factor")), .Names = c("CHANNEL", 
"DATE", "HOUR", "UNIQUE_USERS", "LOGON_VOLUME"), row.names = c(NA, 
-3L), class = "data.frame")

私はこの機能を持っています:

sapply(df, function (x) 
     as.numeric(gsub("(^ +)|( +$)", "0", x))) 

これらのエラーが発生しますが、機能していません。

[ reached getOption("max.print") -- omitted 422793 rows ]
Warning messages:
1: In FUN(X[[4L]], ...) : NAs introduced by coercion
2: In FUN(X[[4L]], ...) : NAs introduced by coercion
3: In FUN(X[[4L]], ...) : NAs introduced by coercion
4: In FUN(X[[4L]], ...) : NAs introduced by coercion

更新:この関数をdfに適用すると:

sapply(df, function (x) gsub("(^ +)|( +$)", "0", x) )

私はこれを得る:

  CHANNEL                 DATE         HOUR              UNIQUE_USERS LOGON_VOLUME
[1,] "Native BlackBerry App" "01/01/2011" "Midnight-1:00am" ""           ""          
[2,] "Native BlackBerry App" "01/01/2011" "1:00am-2:00am"   ""           ""          
[3,] "Native BlackBerry App" "01/01/2011" "2:00am-3:00am"   ""           ""  
4

1 に答える 1

4

で無名関数を定義するsapplyと、その関数への引数は決して使用されません。

sapply(df, function (x) gsub("(^ +)|( +$)", "0", x) ) #===> change df to x

また、すべてを数値に変換すると、数字NA以外の文字列の値になります。 の各列はdata.frameアトミック ベクトルであるため、1 つのタイプのデータしか含めることができません。したがって、すべての要素に共通のデータ型は文字です。

たぶん、あなたはこれをするつもりでした...

sapply( df , gsub , pattern = "^\\s*$" , replacement = 0 )

     CHANNEL                 DATE         HOUR              UNIQUE_USERS LOGON_VOLUME
[1,] "Native BlackBerry App" "01/01/2011" "Midnight-1:00am" "0"          "0"         
[2,] "Native BlackBerry App" "01/01/2011" "1:00am-2:00am"   "0"          "0"         
[3,] "Native BlackBerry App" "01/01/2011" "2:00am-3:00am"   "0"          "0"  

を使用すると、gsub後で整数に変換する必要があり、数値の文字表現以外のものを含む列も取得NAれます。列全体を変更する必要がある場合は、列全体が空であるかどうかを確認し、空である場合はゼロに置き換えることができます。同じ列に文字要素と数値要素を含めることはできません。

len <- colSums( sapply( df , grepl , pattern = "^\\s*$" ) )    
df[ , len > 0 ] <- rep( 0 , nrow(df) )
#                CHANNEL       DATE            HOUR UNIQUE_USERS LOGON_VOLUME
#1 Native BlackBerry App 01/01/2011 Midnight-1:00am            0            0
#2 Native BlackBerry App 01/01/2011   1:00am-2:00am            0            0
#3 Native BlackBerry App 01/01/2011   2:00am-3:00am            0            0
于 2013-09-11T20:50:04.193 に答える