【问题标题】:R lookup chart from data.frame来自data.frame的R查找图表
【发布时间】:2018-03-04 00:26:00
【问题描述】:

我想将 R 中的 data.frame 改成如下所示:

W   Well Name    Ct (dR)
A1  F_0.2,R_0.2  23.72
A2  F_0.2,R_0.2  23.82
A3  F_0.2,R_0.4  22.87
A4  F_0.2,R_0.4  23.1
B1  F_0.4,R_0.2  23.74
B2  F_0.4,R_0.2  24.01
B3  F_0.4,R_0.4  22.86
B4  F_0.4,R_0.4  22.79
C1  F_0.6,R_0.2  23.5
C2  F_0.6,R_0.2  No Ct
C3  F_0.6,R_0.4  23.03
C4  F_0.6,R_0.4  22.61
D1  F_0.8,R_0.2  23.83
D2  F_0.8,R_0.2  23.67
D3  F_0.8,R_0.4  22.48
D4  F_0.8,R_0.4  22.41

进入这个:

    1       2       3       4
A   23.72   23.82   22.87   23.1
B   23.74   24.01   22.86   22.79
C   23.5    No Ct   23.03   22.61
D   23.83   23.67   22.48   22.41

更好的是,像这样:

        R_0.2   R_0.4   R_0.6   R_0.8
F_0.2   23.72   23.82   22.87   23.1
F_0.4   23.74   24.01   22.86   22.79
F_0.6   23.5    No Ct   23.03   22.61
F_0.8   23.83   23.67   22.48   22.41

实际上有 12 列和 8 行,但你明白了 :) 还有——这种数据排序叫什么?

【问题讨论】:

  • 请检查您的初始数据中带有“井名”列的第二个输出。不匹配

标签: r dataframe crosstab


【解决方案1】:

我们将separate 'W' 列一分为二,然后将带有selectspread 的'Well Name' 列删除为'wide' 格式

library(tidyverse)
df1 %>%
   separate(W, into = c("W1", "W2"), sep="(?=\\d+)") %>%
   select(-`Well Name`) %>%
   spread(W2, `Ct (dR)`)
#  W1     1     2     3     4
#1  A 23.72 23.82 22.87  23.1
#2  B 23.74 24.01 22.86 22.79
#3  C  23.5 No Ct 23.03 22.61
#4  D 23.83 23.67 22.48 22.41

输入数据集中的“井名”列值似乎与预期输出不匹配。假设值如下数据所示

df1 %>%
   separate(`Well Name`, into = c("WN1", "WN2"), sep=",") %>% 
   select(-W) %>% 
   spread(WN2, `Ct (dR)`)
#    WN1 R_0.2 R_0.4 R_0.6 R_0.8
#1 F_0.2 23.72 23.82 22.87  23.1
#2 F_0.4 23.74 24.01 22.86 22.79
#3 F_0.6  23.5 No Ct 23.03 22.61
#4 F_0.8 23.83 23.67 22.48 22.41

数据

df1 <-  structure(list(W = c("A1", "A2", "A3", "A4", "B1", "B2", "B3", 
"B4", "C1", "C2", "C3", "C4", "D1", "D2", "D3", "D4"), `Well Name` = c("F_0.2,R_0.2", 
"F_0.2,R_0.4", "F_0.2,R_0.6", "F_0.2,R_0.8", "F_0.4,R_0.2", "F_0.4,R_0.4", 
"F_0.4,R_0.6", "F_0.4,R_0.8", "F_0.6,R_0.2", "F_0.6,R_0.4", "F_0.6,R_0.6", 
"F_0.6,R_0.8", "F_0.8,R_0.2", "F_0.8,R_0.4", "F_0.8,R_0.6", "F_0.8,R_0.8"
), `Ct (dR)` = c("23.72", "23.82", "22.87", "23.1", "23.74", 
"24.01", "22.86", "22.79", "23.5", "No Ct", "23.03", "22.61", 
"23.83", "23.67", "22.48", "22.41")), .Names = c("W", "Well Name", 
"Ct (dR)"), row.names = c(NA, -16L), class = "data.frame")

【讨论】:

  • 似乎不起作用。 >>>> df1>> 你的行 >>> 选择错误(., -@987654327 @) : 未使用的参数 (-Well Name)
  • @ChristianOlesen 可能您需要检查列名。在您输入的数据中,列名中有空格,但是一旦您读入R,它可以更改为.您可以尝试使用我在此处显示的数据的代码
  • 现在我收到这条消息:“选择错误(.,-W):未使用的参数(-W)”。但是非常感谢你帮助我 - 我整个早上都在努力解决这个问题(丹麦)
  • @ChristianOlesen 在原始数据集中,您有一个名为 W 的列。请在阅读后检查“df1”中的列名,即colnames(df1),并查看该名称是否存在。顺便说一句,我正在使用 dplyr_0.7.4tidyr_0.7.2
  • 我成功了!是 dplyr 包出了问题(或其他一些包屏蔽了选择功能):D 非常感谢!
猜你喜欢
  • 2017-07-17
  • 2016-06-27
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 2017-01-08
  • 2018-08-16
相关资源
最近更新 更多