小编Sla*_*ron的帖子

熊猫 - 计算所有列的z得分

我有一个包含单列ID的数据框,所有其他列都是我想要计算z分数的数值.这是它的一个小节:

ID      Age    BMI    Risk Factor
PT 6    48     19.3    4
PT 8    43     20.9    NaN
PT 2    39     18.1    3
PT 9    41     19.5    NaN
Run Code Online (Sandbox Code Playgroud)

我的一些列包含NaN值,我不想将其包括在z-score计算中,所以我打算使用提供给这个问题的解决方案:如何使用nans来规范化pandas列?

df['zscore'] = (df.a - df.a.mean())/df.a.std(ddof=0)
Run Code Online (Sandbox Code Playgroud)

我有兴趣将此解决方案应用于除ID列之外的所有列,以生成新的数据框,我可以将其保存为Excel文件

df2.to_excel("Z-Scores.xlsx")
Run Code Online (Sandbox Code Playgroud)

所以基本上; 如何计算每列的z分数(忽略NaN值)并将所有内容推送到新的数据框中?

SIDENOTE:熊猫中有一个叫做"索引"的概念让我感到恐惧,因为我不太了解它.如果索引是解决此问题的关键部分,请愚蠢地解释索引.

python indexing statistics pandas

33
推荐指数
5
解决办法
8万
查看次数

使用R和plot.ly - 如何将输出脚本保存为网页

我想用R和plot.ly制作一些交互式图形.当我在R-Studio中运行以下代码时,它会生成一个交互式图形.

library(plotly)
set.seed(100)
d <- diamonds[sample(nrow(diamonds), 1000), ]
plot_ly(d, x = carat, y = price, text = paste("Clarity: ", clarity),
    mode = "markers", color = carat, size = carat)
Run Code Online (Sandbox Code Playgroud)

生成此图形后,当我单击R-Studio的"绘图"窗口中的"导出"按钮时,它为我提供了将绘图保存为网页的选项.如何编写将生成的图表保存为网页的过程?我的最终目标是从bash脚本中迭代运行Rscripts以生成多个网页.

r plotly

21
推荐指数
1
解决办法
1万
查看次数

Pandas - 删除只有NaN值的行

我有一个包含许多NaN值的DataFrame.我想删除包含太多NaN值的行; 具体来说:7个或更多.

我尝试了几种方法使用dropna函数,但似乎很清楚它贪婪地删除包含任何 NaN值的列或行.

这个问题(Slice Pandas DataFrame by Row)告诉我,如果我可以编译一个包含太多NaN值的行的列表,我可以用一个简单的方法将它们全部删除

df.drop(rows)
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用count函数计算非空值,我可以从总数中减去并以这种方式获得NaN计数(是否有直接计算连续NaN值的方法?).但即便如此,我也不确定如何编写一个逐行遍历DataFrame的循环.

这是我认为正确的一些伪代码:

### LOOP FOR ADDRESSING EACH row:
    m = total - row.count()
    if (m > 7):
        df.drop(row)
Run Code Online (Sandbox Code Playgroud)

我仍然是熊猫的新手,所以我对解决这个问题的其他方法非常开放; 他们是更简单还是更复杂.

python rows dataframe pandas

14
推荐指数
2
解决办法
1万
查看次数

R - 如何为复杂的ggplot图像分配屏幕空间

我正在尝试编写一个脚本,在单个图像中生成四个不同的图.具体来说,我想尽可能地重新创建这个图形:

复杂情节

我当前的脚本生成了四个类似于这些的图,但我无法弄清楚如何相应地分配屏幕空间.我想要:

  1. 修改图的高度和宽度,使四个都有均匀的宽度,一个比其他高度均匀的高度高一些
  2. 通过坐标定义图例的位置,以便我可以有效地使用屏幕空间
  3. 根据需要明确地修改我的图像的整体形状(也许我需要它在某个点更接近方形)

生成一些数据

pt_id = c(1:279) # DEFINE PATIENT IDs
smoke = rbinom(279,1,0.5) # DEFINE SMOKING STATUS
hpv = rbinom(279,1,0.3) # DEFINE HPV STATUS
data = data.frame(pt_id, smoke, hpv) # PRODUCE DATA FRAME
Run Code Online (Sandbox Code Playgroud)

添加解剖学站点数据

data$site = sample(1:4, 279, replace = T)
data$site[data$site == 1] = "Hypopharynx"
data$site[data$site == 2] = "Larynx"
data$site[data$site == 3] = "Oral Cavity"
data$site[data$site == 4] = "Oropharynx"
data$site_known = 1  # HACK TO FACILITATE PRODUCING BARPLOTS
Run Code Online (Sandbox Code Playgroud)

添加变异频率数据

data$freq = sample(1:1000, 279, replace …
Run Code Online (Sandbox Code Playgroud)

plot r ggplot2 gridextra

11
推荐指数
1
解决办法
616
查看次数

Pandas - 合并两个具有相同列名的 DataFrame

我在第一列中有两个具有相同列名和相同 ID 的数据框。除了 ID 列之外,在一个 DataFrame 中包含值的每个单元格在另一个 DataFrame 中都包含 NaN。以下是它们的外观示例:

ID    Cat1    Cat2    Cat3
1     NaN     75      NaN
2     61      NaN     84
3     NaN     NaN     NaN


ID    Cat1    Cat2    Cat3
1     54      NaN     44
2     NaN     38     NaN
3     49      50      53
Run Code Online (Sandbox Code Playgroud)

我想将它们合并到一个 DataFrame 中,同时保持相同的列名。所以结果应该是这样的:

ID    Cat1    Cat2    Cat3
1     54      75      44
2     61      38      84
3     49      50      53
Run Code Online (Sandbox Code Playgroud)

我试过:

df3 = pd.merge(df1, df2, on='ID', how='outer')
Run Code Online (Sandbox Code Playgroud)

这给了我一个包含两倍列数的 DataFrame。如何将每个 DataFrame 中的值合并为一个?

python merge dataframe pandas

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

dplyr中的R paste函数不会按预期迭代

我对paste()函数的行为方式感到困惑.我有一个包含以下列的dplyr表:

Year    Month    DayofMonth
2001    May      21
2001    May      22
2001    June     9
2001    March    4
Run Code Online (Sandbox Code Playgroud)

我想将它组合成一个名为"Date"的列.我想我已经使用了这个命令:

df2 = mutate(df, Date = paste(c(Year, Month, DayofMonth), sep = "-",))
Run Code Online (Sandbox Code Playgroud)

不幸的是,这似乎连接了Year中的每个元素,然后是Month中的每个元素,然后是DayofMonth中的每个元素,所以结果看起来像这样:

2001-2001-2001-2001 ... May-May-June-March ... 21-22-9-4
Run Code Online (Sandbox Code Playgroud)

我应该如何修改我的命令,以便粘贴函数分别迭代每一行?

PS这是Data Camp课程的一部分,因此我通过他们的服务器上的任何R版本运行命令.

r paste dplyr

4
推荐指数
1
解决办法
1422
查看次数

R strsplit不会拆分为"."?

我正在编写一个R脚本,并希望定义一个变量,以便在绘图注释中用作文件名的一部分.我以为我会使用strsplit()函数.这是我的代码和输出:

infile = "ACC_1346.table.txt"

x = strsplit(infile, ".")

class(infile)
[1] "character"

class(x)
[1] "list"

str(x)
List of 1
$ : chr [1:18] "" "" "" "" ...

x[[1]]
[1] "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
Run Code Online (Sandbox Code Playgroud)

我预计最终的输出是:

[1] "ACC_1346" "table" "txt"
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

r strsplit

4
推荐指数
2
解决办法
1551
查看次数

在Perl中,如何按其(数值)值的顺序打印哈希键?

我有一个散列,其中键是字符串,值是一位数字; 这是一段哈希:

      'f92a0d43-a230-4bfd-b580-9eac5e0ce6cf' => 7,
      '26c4b622-969f-4861-bbab-dd506ea4b00a' => 1,
      'afb1f925-4109-4b1d-967f-3958106e0bc3' => 3,
      'a099a6dc-0c66-4683-94c3-29d6ef6947fd' => 1,
      'e71c4860-224d-4b8d-ae9e-4700e9e65a97' => 2,
Run Code Online (Sandbox Code Playgroud)

我想按降序值的顺序打印键.因此对于那里列出的切片,输出将是:

       'f92a0d43-a230-4bfd-b580-9eac5e0ce6cf' => 7
       'afb1f925-4109-4b1d-967f-3958106e0bc3' => 3
       'e71c4860-224d-4b8d-ae9e-4700e9e65a97' => 2
       '26c4b622-969f-4861-bbab-dd506ea4b00a' => 1
       'a099a6dc-0c66-4683-94c3-29d6ef6947fd' => 1
Run Code Online (Sandbox Code Playgroud)

具有相同值的键的顺序无关紧要.这个问题的答案: 在Perl中,如何打印对应于散列中最大值的键? 建议使用sort函数; 我有:

  my @values = sort { $b <=> $a } values %ID_hash;
Run Code Online (Sandbox Code Playgroud)

我遇到的问题实际上是按顺序打印键.

我试过了:

    foreach(@values) {
        my $cur = $_;
        print "$ID_hash{$cur}\t$cur\n";
    }
Run Code Online (Sandbox Code Playgroud)

哪个失败是因为我提供的是价值而不是钥匙.

我知道我总是可以将键/值对打印为制表符分隔文件并使用Unix版本的排序,但我确信有一种方法可以使用Perl.任何帮助都感激不尽.

sorting perl hash

3
推荐指数
1
解决办法
463
查看次数

Perl - 如何匹配不完全相同的字符串?

我有一个我想在文件中找到的字符串列表.如果列表中和文件中的字符串完全匹配,这将非常简单.不幸的是,名称上存在拼写错误和变体.以下是其中一些字符串有所不同的示例

List          File
B-Arrestin    Beta-Arrestin
Becn-1        BECN 1
CRM-E4        CRME4
Run Code Online (Sandbox Code Playgroud)

请注意,尽管是不同的字符串,但每个对都应算作匹配.我知道我可以对各种变化进行分类,并编写单独的REGEX来识别匹配,但这很麻烦,我可能最好手动寻找匹配.我认为我的问题的最佳解决方案是某种表达方式:

"完全匹配此字符串,但如果有不匹配的X字符,则仍将其视为匹配"

这样的事情存在吗?是否有另一种方法来匹配不完全相同但接近的字符串?

regex string perl

3
推荐指数
1
解决办法
176
查看次数

R - 将ggplot对象列表更改为grid.arrange将接受的grob列表?

我正在迭代一些数据,创建ggplot我想在单个图像上一起打印的图形列表.我的代码有两个循环,一个在另一个循环中.外循环根据一个变量细分数据.内部循环进一步细分数据并为每个细分生成散点图; 这些图保存在列表中.一旦内部循环完成,就会使用像这样的列表对象创建grid.arrange对象(注意:此代码包含一个自定义函数,my_scatter在此问题的底部共享):

require(ggplot2)
require(grid)
require(gridExtra)
PRIMARY LOOP STRUCTURE {
    ...
    my_plots = list()
      for (j in c(1:length(my_nodes))){
        cur_node = my_nodes[j]
        node_dat = temp_dat[temp_dat$Node == cur_node,]
        p = my_scatter(node_dat, "PRE", "POST") + geom_point(aes(color = Node, shape = Recurrence_Type, size = 2))
        my_plots[[j]] = p
      }         
    grid.arrange(my_plots[[1]],my_plots[[2]],my_plots[[3]],my_plots[[4]],my_plots[[5]], nrow = 4, ncol = 3)
}
Run Code Online (Sandbox Code Playgroud)

问题是对于循环的一些迭代,my_plots将具有不同数量的元素.我知道我可以通过一系列条件语句来解决这个问题:

if (length(my_plots) == 2) {
    grid.arrange(my_plots[[1]],my_plots[[2]],nrow=1,ncol=2)
} elsif ( length(my_plots == 3) {
    grid.arrange(my_plots[[1]],my_plots[[2]],nrow=2,ncol=2)
} elsif...
Run Code Online (Sandbox Code Playgroud)

但这似乎很麻烦,我希望找到一个不那么生硬的解决方案.通常情况下我会用facet_grid()这种东西,但是当散射图被扭曲成facet_grid产生的超过2或3个图时产生的超薄矩形时很难解释.

我看到,这个问题 …

r ggplot2

3
推荐指数
1
解决办法
2350
查看次数

标签 统计

r ×5

pandas ×3

python ×3

dataframe ×2

ggplot2 ×2

perl ×2

dplyr ×1

gridextra ×1

hash ×1

indexing ×1

merge ×1

paste ×1

plot ×1

plotly ×1

regex ×1

rows ×1

sorting ×1

statistics ×1

string ×1

strsplit ×1