Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在数据帧的列中添加负数和正数_R - Fatal编程技术网

R 在数据帧的列中添加负数和正数

R 在数据帧的列中添加负数和正数,r,R,我有一个如下的数据帧,其值范围为-100到+100,大约有2000列和60000行。我想分别添加负值和正值,但它给我的值不正确。我的数据框如下所示: -40.11814993 -42.32948849 -43.60532899 -44.5204376 -41.63980543 -22.37778647 -25.46700883 -27.81140156 -28.82498654 -25.35257089 7.686002395 5.269545374 2

我有一个如下的数据帧,其值范围为-100到+100,大约有2000列和60000行。我想分别添加负值和正值,但它给我的值不正确。我的数据框如下所示:

-40.11814993    -42.32948849    -43.60532899    -44.5204376 -41.63980543
-22.37778647    -25.46700883    -27.81140156    -28.82498654    -25.35257089
7.686002395 5.269545374 2.654357646 1.929572443 4.904498013
17.73773603 15.68456051 14.07506837 13.69786317 14.47200364
NA  NA  NA  NA  NA
NA  NA  NA  NA  NA
NA  NA  NA  NA  NA
NA  NA  NA  NA  NA
NA  NA  NA  NA  NA
56.72239048 53.39504497 52.53564149 47.32158272 43.41294833
59.792111   54.45067217 52.77495286 48.27796907 44.49740268
63.99660216 56.19211308 53.75103818 50.25612484 46.40220142
59.43969877 50.4747657  47.5165962  44.37596015 40.85330564
52.78043922 42.79880307 39.09252048 36.4381745  33.07448607
我使用了以下代码,如果有人进行更正,我希望按列添加:

trialdata=read.table('trial.csv',header=TRUE,sep=',')
frame=data.frame(trialdata[3:20])
negativesum=apply(frame<0, MARGIN=2, FUN = sum, na.rm = TRUE)
positivesum=apply(frame>0, MARGIN=2, FUN = sum, na.rm = TRUE)
trialdata=read.table('trial.csv',header=TRUE,sep=','))
frame=data.frame(trialdata[3:20])
negativesum=apply(frame0,边距=2,FUN=sum,na.rm=TRUE)

无需使用apply,请尝试以下操作:

#dummy dataframe
df <- 
read.table(text="-40.11814993    -42.32948849    -43.60532899    -44.5204376 -41.63980543
-22.37778647    -25.46700883    -27.81140156    -28.82498654    -25.35257089
7.686002395 5.269545374 2.654357646 1.929572443 4.904498013
17.73773603 15.68456051 14.07506837 13.69786317 14.47200364
NA  NA  NA  NA  NA
NA  NA  NA  NA  NA
NA  NA  NA  NA  NA
NA  NA  NA  NA  NA
NA  NA  NA  NA  NA
56.72239048 53.39504497 52.53564149 47.32158272 43.41294833
59.792111   54.45067217 52.77495286 48.27796907 44.49740268
63.99660216 56.19211308 53.75103818 50.25612484 46.40220142
59.43969877 50.4747657  47.5165962  44.37596015 40.85330564
52.78043922 42.79880307 39.09252048 36.4381745  33.07448607")

#result
sum(df[df<0],na.rm = TRUE)
#[1] -342.047
sum(df[df>0],na.rm = TRUE)
#[1] 1328.735
#虚拟数据帧

df假设您需要按列求和(因为您使用的是
apply(..,2,…)
),我建议如下(使用假数据):

set.seed(123)

frame如果我们需要获得列式求和,我们可以使用apply家族中的任何一个来获得输出。在这里,我们使用的是
vapply
,这会更快一些。(使用@zx8754帖子中的数据)

不需要一次调用
每个汇总
,一个较短的选项是在双击
每个汇总
后绑定行

 bind_rows(summarise_each(df, funs(positive=sum(.[.>0], na.rm=TRUE))), 
           summarise_each(df, funs(negative=sum(.[.<=0], na.rm=TRUE)))
  )
bind_行(汇总每个行(df,funs(正=和(...>0),na.rm=真)),
总结每个(df,funs)(负=和(..
frame
 vapply(df, function(x)  c(sum(x[x>0], na.rm=TRUE), 
               sum(x[x<=0], na.rm=TRUE)), double(2L))
 #          V1       V2        V3        V4        V5
 #[1,] 318.15498 278.2655 262.40018 242.29725 227.61685
 #[2,] -62.49594 -67.7965 -71.41673 -73.34542 -66.99238
 library(dplyr)
 library(tidyr) 
 summarise_each(df, funs(positive=sum(.[.>0], na.rm=TRUE), 
                       negative=sum(.[.<=0], na.rm=TRUE))) %>%
              gather(Var, Val) %>%
              separate(Var, c('Var1', 'Var2')) %>% 
              spread(Var1, Val)
 #     Var2        V1       V2        V3        V4        V5
 #1 negative -62.49594 -67.7965 -71.41673 -73.34542 -66.99238
 #2 positive 318.15498 278.2655 262.40018 242.29725 227.61685
 bind_rows(summarise_each(df, funs(positive=sum(.[.>0], na.rm=TRUE))), 
           summarise_each(df, funs(negative=sum(.[.<=0], na.rm=TRUE)))
  )