小编Wil*_*T-E的帖子

如何为R中的tableGrob自定义特定列?

我想在tableGrob中自定义特定列,对于这个可重复的示例,我选择了查看自定义理由.

假设您有以下数据帧:

df <- data.frame(Order = c(1:3), Name = c("Adam", "Ben", "Charlie"), Score = c(4, 8, 9))
Run Code Online (Sandbox Code Playgroud)

并且您想使用该包gridExtra来呈现表:

dfGrob <- tableGrob(df, rows = NULL)
grid.arrange(dfGrob)
Run Code Online (Sandbox Code Playgroud)

您可以通过调整用于构建grob的主题来调整列的对齐方式,例如:

tt1 <- ttheme_default(core=list(fg_params=list(hjust= 0, x=0.05)),
                  colhead=list(fg_params=list(hjust=0, x=0.1)))


dfGrob <- tableGrob(df, rows = NULL, theme = tt1)
grid.arrange(dfGrob)
Run Code Online (Sandbox Code Playgroud)

但是,这会调整所有列的对齐方式.假设我只想离开订单栏的合理性,并将其他人留在他们的中心理由位置,我该怎么做?

我试验过:

tt1 <- ttheme_default(core=list(fg_params=list(hjust= c(0, 0.5, 0.5), x=c(0.15, 0.5, 0.5))),
                  colhead=list(fg_params=list(hjust=1, x=0.95)))

dfGrob <- tableGrob(df, rows = NULL, theme = tt1)
grid.arrange(dfGrob)
Run Code Online (Sandbox Code Playgroud)

但这似乎只是按行定制.如何调整此代码以按列自定义?

r dataframe gridextra

5
推荐指数
1
解决办法
1116
查看次数

机器特定的慢read_excel读取时间

read_excel在具有特定xlsm文件的特定计算机上使用时,我的读取时间非常慢.在两台不同的机器上读取相同的xlsm文件,我的读取时间为72秒,而0.2秒.较慢的机器实际上具有更多的计算能力.

两台机器都是Windows,我readxl在两台机器上使用的是1.1.0版本.我尝试在较慢的机器上使用软件包v1.2.0,同样的问题仍然存在.

在过去的两年里,我一直在读这个xlsm文件到R +没有任何问题.在这两年里,我经常在excel文件上运行一组宏.然而,现在,当我运行相同的宏并保存文件时,较慢的机器现在需要70s而不是<1s将其读入R.如果我要求较慢的机器读取旧版本的xlsm文件它没有问题.该文件大约是15MB.我要求read_excel读取的xlsm文件的哪个选项卡无关紧要,时间仍然是大约70秒.

我已更新R(v3.5.2)并确保所有readxl包依赖项都是最新的.我不知道还有什么可以尝试,任何想法都会非常感激.

r readxl

5
推荐指数
1
解决办法
279
查看次数

如何在没有引用值的情况下从 R 编写 csv?

我正在寻找从 R 创建一个 csv ,其中没有一个值在它们周围有引号。当您在 excel 中创建 CSV 而不是在 R 中时,这似乎是常态。

以下面的例子为例:

set.seed(100)
df <- data.frame(Apples=sample(1:10, 5), Oranges=sample(1:10, 5), Bananas=sample(1:10, 5), Dates=sample(1:10, 5))
write.table(df, sep=",", row.names = FALSE)
Run Code Online (Sandbox Code Playgroud)

如果您在记事本中打开它,您会看到列标题周围有引号。如果要成功将 csv 导入到另一个程序中,我需要它没有引号。

我注意到在 Excel 中重新保存 csv 会导致引号消失,但我需要避免执行此步骤。

我尝试过类似的事情col.names = noquote(colnames(LineupCSV))作为论据,write.table但没有成功。

在 R 中编写 csv 时,如何删除值周围的引号?

csv r

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

有没有一种快速的方法来修改R中嵌套列表的一致组件?

我有一个值向量,希望用于修改嵌套列表的一致组件。目前,我正在使用for循环来执行此操作,事实证明它相当慢,并且我想知道是否有更快的方法可以执行此操作。

通过可重现的示例:

#Create Data and List
set.seed(100)
Students <- c("Amy", "Ben", "Caz")
Subject <- c("Maths", "English", "Science")

ExamResults <- lapply(Students, function (r) {
  Scores <- lapply(Subject, function(x) round(runif(4, 0, 100)))
  names(Scores) <- Subject
  Scores
})
names(ExamResults) <- Students
Run Code Online (Sandbox Code Playgroud)

这将创建一个如下所示的列表:

$Amy
$Amy$Maths
[1] 31 26 55  6

$Amy$English
[1] 47 48 81 37

$Amy$Science
[1] 55 17 62 88

$Ben
$Ben$Maths
[1] 28 40 76 67

$Ben$English
[1] 20 36 36 69

$Ben$Science
[1] 54 71 54 75

$Caz
$Caz$Maths
[1] …
Run Code Online (Sandbox Code Playgroud)

r nested-lists

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

如何在R中的每个组中选择'x'最近的值?

我正在尝试在 R 中的数据框中选择/过滤每个组中的最新值。例如,我想从以下数据中的每个 Name 组中选择 3 个最近的值(即最接近今天的日期)框架:

Player  Date    Result
 Sam    03/15/2015  1
 Sam    03/22/2015  0
 Sam    04/04/2015  2
 Sam    04/12/2015  1
 Sam    04/18/2015  1
 Sam    04/26/2015  0
 Sam    08/08/2015  3
Steve   02/17/2015  0
Steve   02/21/2015  0
Steve   03/04/2015  4
Steve   03/11/2015  2
Steve   03/15/2015  1
Steve   03/22/2015  0
Steve   04/12/2015  0
Steve   04/18/2015  2
Steve   04/26/2015  1
Steve   04/29/2015  2
Steve   08/16/2015  4
Jasper  03/15/2015  3
Jasper  03/22/2015  3.5
Jasper  04/04/2015  4
Jasper  04/12/2015  4
Jasper  04/18/2015  5
Jasper …
Run Code Online (Sandbox Code Playgroud)

r greatest-n-per-group

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

如何对矩阵中行的所有组合求和?

我正在寻找一个矩阵中所有可能的行组合。一个类似于rowSums()函数但不产生nrow()和的函数,它将产生nrow() ^ nrow()和。

例如:

set.seed(10)
dummymat <-  matrix(floor(runif(9, 0, 2)), nrow = 3, ncol = 3)
Run Code Online (Sandbox Code Playgroud)

产生矩阵:

     [,1] [,2] [,3]
[1,]    1    1    0
[2,]    0    0    0
[3,]    0    0    1
Run Code Online (Sandbox Code Playgroud)

为了找到矩阵的每个可能的行总和,可以编写以下效率很低的代码:

allrowsums <- c()

for(i in 1:nrow(dummymat)) {
  firstcolval <- dummymat[i,1]
  for(j in 1:nrow(dummymat)) {
    secondcolval <- dummymat[j,2]
    for(k in 1:nrow(dummymat)) {
      thirdcolval <- dummymat[k,3]
      rowsum <- firstcolval + secondcolval + thirdcolval
      allrowsums <- append(allrowsums,rowsum)
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

给出以下输出:

[1] 2 2 …
Run Code Online (Sandbox Code Playgroud)

r matrix

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