小编spo*_*234的帖子

删除缺少x%的列/行

我想删除NA数据框中超过50%s的所有列或行.

这是我的解决方案:

# delete columns with more than 50% missings
miss <- c()
for(i in 1:ncol(data)) {
  if(length(which(is.na(data[,i]))) > 0.5*nrow(data)) miss <- append(miss,i) 
}
data2 <- data[,-miss]


# delete rows with more than 50% percent missing
miss2 <- c()
for(i in 1:nrow(data)) {
  if(length(which(is.na(data[i,]))) > 0.5*ncol(data)) miss2 <- append(miss2,i) 
}
data <- data[-miss,]
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一个更好/更快的解决方案.

我也很感激dplyr解决方案

r dplyr

17
推荐指数
3
解决办法
2万
查看次数

设置alpha并删除ggpairs中密度图的黑色轮廓

考虑这个例子:

data(tips, package = "reshape")
library(GGally)
pm <- ggpairs(tips, mapping = aes(color = sex), columns = c("total_bill", "time", "tip"))
pm
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如何使密度图更透明并去除黑线?

这些GGally软件包最近似乎发生了很大的变化,我找不到一个有效的解决方案

更新

我找到了如何使用自定义函数更改alpha:

my_dens <- function(data, mapping, ..., low = "#132B43", high = "#56B1F7") {
  ggplot(data = data, mapping=mapping) +
    geom_density(..., alpha=0.7) 
}

pm <- ggpairs(tips, mapping = aes(color = sex), columns = c("total_bill", "time", "tip"),
              diag=list(continuous=my_dens))
pm
Run Code Online (Sandbox Code Playgroud)

但黑线仍然存在.

r ggplot2 ggally

12
推荐指数
2
解决办法
4948
查看次数

使用插入符号进行生存分析(随机生存林)

有没有办法caret用于生存分析.我真的很喜欢它的易用性.我尝试使用party包在插入符号列表中的随机生存林.

这有效:

library(survival)
library(caret)
library(party)


fitcforest <- cforest(Surv(futime, death) ~ sex+age, data=flchain,
                     controls = cforest_classical(ntree = 1000))
Run Code Online (Sandbox Code Playgroud)

但是使用caret我得到一个错误:

fitControl <- trainControl(## 10-fold CV
  method = "repeatedcv",
  number = 10,
  repeats = 2,
)

cforestfit <- train(Surv(futime, death) ~ sex+age,data=flchain, method="cforest",trControl = fitControl)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Error: nrow(x) == length(y) is not TRUE
Run Code Online (Sandbox Code Playgroud)

有没有办法让这些Surv对象与插入符号一起工作?我可以使用其他以生存分析为导向的包装吗?

谢谢

r r-caret

8
推荐指数
1
解决办法
1879
查看次数

添加自定义函数以在dplyr中汇总

我有一个这样的数据框,每个都有不同的观察结果id:

library(dplyr)
df <- data.frame(id=c(1,1,1,1,1,2,2,3), v1= rnorm(8), v2=rnorm(8))
Run Code Online (Sandbox Code Playgroud)

然后我分组id:

by_id <- group_by(df, id)
Run Code Online (Sandbox Code Playgroud)

现在我想计算v1每个观测值的平均值和sd id.这很简单summarise:

df2 <- summarise(by_id,
                    v1.mean=mean(v1),
                    v1.sd=sd(v1))
Run Code Online (Sandbox Code Playgroud)

现在,我想补充的线性回归的斜率v1v2

df2 <- summarise(by_id,
                   v1.mean=mean(v1),
                   v1.sd=sd(v1),
                   slope=as.vector(coef(lm(v1~v2,na.action="na.omit")[2])))
Run Code Online (Sandbox Code Playgroud)

然而,这失败了,我认为因为一个人(id = 3)只有一个观察,因此不能建立一个线性模型.

我也试过了

   slope=ifelse(n()==1,0,as.vector(coef(lm(v1~v2,na.action="na.omit")[2]))))
Run Code Online (Sandbox Code Playgroud)

但它也不起作用.有一个简单的解决方案吗?

并不是说如果我有多个观察但是例如v2缺少值,那么lm也可能是失败的情况.

r dplyr

8
推荐指数
1
解决办法
4635
查看次数

sas7bdat日期格式为R日期格式

我使用sas7bdat包加载了一个sas7bdat文件,但日期转换为这样的数字:

sas <- c(16922, 17045, 17014, 16983)
Run Code Online (Sandbox Code Playgroud)

我试过了

rPOSIX <- as.POSIXct(sas,origin='1960-01-01')
Run Code Online (Sandbox Code Playgroud)

如上所述,但这是错的.我无法访问SAS,但日期应该是2006年左右.

datetime r sas

8
推荐指数
1
解决办法
2018
查看次数

pandas boxplot中共享轴的不同ylim

我有一个分组的熊猫箱图,安排在(2,2)网格中:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.rand(140, 4), columns=['A', 'B', 'C', 'D'])
df['models'] = pd.Series(np.repeat(['model1','model2', 'model3', 'model4', 'model5', 'model6', 'model7'], 20))
bp = df.boxplot(by="models",layout=(2,2),figsize=(6,8))
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我现在只想更改ylim第二行.

我的想法是添加:

[ax_tmp.set_ylim(-10,10) for ax_tmp in np.asarray(bp).reshape(-1)[2:4]]
Run Code Online (Sandbox Code Playgroud)

要么

[ax_tmp.set_ylim(-10,10) for ax_tmp in np.asarray(bp)[1,:]]
Run Code Online (Sandbox Code Playgroud)

但他们都改变了所有子图的ylim.这可能是因为共享.但我不知道要摆脱它.

我的问题与这个问题有些相关:pandas boxplot,groupby在每个子图中不同的ylim,但在我看来并不重复.此解决方案也不容易适用.

更新:理想情况下,行应共享一个共同的y,而不是每个绘图都有自己的

python matplotlib pandas

7
推荐指数
1
解决办法
3307
查看次数

如果为NA,则填充前一列的列

我有这样的数据框

df <- data.frame(v1 = 10:14, v2 = c(NA, 1, NA, 3, 6), v3 = c(1, NA, NA, 9, 4))

  v1 v2 v3
1 10 NA  1
2 11  1 NA
3 12 NA NA
4 13  3  9
5 14  6  4
Run Code Online (Sandbox Code Playgroud)

我现在想用前一列的值填充NAs,所以它看起来像这样:

  v1 v2 v3
1 10 10  1
2 11  1  1
3 12 12 12
4 13  3  9
5 14  6  4
Run Code Online (Sandbox Code Playgroud)

我知道如何手动执行此操作,如下所示:

df$v2 <- ifelse(is.na(df$v2), df$v1, df$v2)
Run Code Online (Sandbox Code Playgroud)

如何在包含多列的完整数据框架中自动执行此操作?

r dataframe dplyr

7
推荐指数
3
解决办法
419
查看次数

使用randomForestSRC在特定时间点生存的概率

rfsrc用来模拟生存问题,像这样:

library(OIsurv)
library(survival)
library(randomForestSRC)

data(burn)
attach(burn)

library(randomForestSRC)

fit <- rfsrc(Surv(T1, D1) ~  ., data=burn)

# predict on the train set
pred <- predict(fit, burn, OOB=TRUE, type=response)
pred$predicted
Run Code Online (Sandbox Code Playgroud)

这给了我所有患者的总生存概率.

如何获得不同时间点(例如0-5个月或0-10个月)的每个人的生存概率?

r random-forest survival-analysis

6
推荐指数
1
解决办法
2258
查看次数

haskell列表理解(数论问题)

我尝试在haskell中解决以下问题:

使用gcd(a,100)= 1找到每个a的最小数字b(a ^ b mod 100)= 1

我试过这个:

head[ b | a <- [1..], b <- [1..], (a^b `mod` 100) == 1, gcd a 100 == 1]
Run Code Online (Sandbox Code Playgroud)

但这会产生1 ^ 1作为第一个解决方案,这是不正确的,它应该适用于每一个 ; 例如,3 ^ 1不是解决方案.我认为正确的解决方案是b = 20但我想在haskell中使用它.

theory haskell numbers list-comprehension list

5
推荐指数
2
解决办法
496
查看次数

使用dplyr将组汇总为间隔

H,我有一个像这样的数据框:

d <- data.frame(v1=seq(0,9.9,0.1),
            v2=rnorm(100),
            v3=rnorm(100))

> head(d)
   v1          v2         v3
1 0.0 -0.01431916 -0.5005415
2 0.1 -1.01575590  1.5307473
3 0.2  1.00081065 -0.1730830
4 0.3 -1.20697918  0.5105118
5 0.4 -2.16698578 -1.0120544
6 0.5  0.33886508  0.4797016
Run Code Online (Sandbox Code Playgroud)

我现在想要一个新的数据框,该数据框汇总所有区间0-0.99、1-1.99、2-2.99、3-3.99 ...中的值。

像这样

start end mean.v2 mean.v3
    0   1     0.2     0.1
    1   2     0.5     0.4
Run Code Online (Sandbox Code Playgroud)

等等

谢谢

更新,我应该补充一点,在我的真实数据集中,每个时间间隔的观察值具有不同的长度,并且它们并不总是从零开始或以10结束

r dplyr

5
推荐指数
2
解决办法
5243
查看次数