小编djh*_*rio的帖子

按逻辑列的子集data.table

我有一个data.table逻辑列.为什么逻辑列的名称不能直接用于i参数?查看示例.

dt <- data.table(x = c(T, T, F, T), y = 1:4)

# Works
dt[dt$x]
dt[!dt$x]

# Works
dt[x == T]
dt[x == F]

# Does not work
dt[x]
dt[!x]
Run Code Online (Sandbox Code Playgroud)

r subset data.table

28
推荐指数
1
解决办法
3729
查看次数

使用BOM读取UTF-8文本文件

我有一个文本文件,开头有字节顺序标记(U + FEFF).我试图在R中读取文件.是否可以避免字节顺序标记?

函数fread(来自data.table包)读取文件,但?»æ在第一个变量名的开头添加:

> names(frame_pers)[1]
[1] "?Ⱦreg_date"
Run Code Online (Sandbox Code Playgroud)

同样是与read.csv功能.

目前我已经创建了一个从第一列名称中删除BOM的功能,但我相信应该有一种方法来自动剥离BOM.

remove.BOM <- function(x) setnames(x, 1, substring(names(x)[1], 4))

> names(frame_pers)[1]
[1] "?Ⱦreg_date"
> remove.BOM(frame_pers)
> names(frame_pers)[1]
[1] "reg_date"
Run Code Online (Sandbox Code Playgroud)

我正在使用R会话的本机编码:

> options("encoding" = "")
> options("encoding")
$encoding
[1] ""
Run Code Online (Sandbox Code Playgroud)

unicode byte-order-mark r utf-8 character-encoding

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

ggplot2找不到对象错误

我无法理解这一点.

这些例子正在起作用:

# Function with geom_density

gr.den <- function(var.name) {
  ggplot(results, aes(get(var.name), fill = name)) +
  geom_density(alpha = 0.2) +
  geom_vline(xintercept = tv[, var.name], color="red", size=1) +
  xlab(var.name)
}

gr.den("sum.Empl")

# Example with geom_point

ggplot(results, aes(sum.All, sum.Empl)) +
  geom_point(alpha = 1/5) +
  opts(aspect.ratio = 1) +
  facet_grid(. ~ name)
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用geom_point创建类似的功能:

gr.sc <- function(var.name.1, var.name.2) {
  ggplot(results, aes(get(var.name.1), get(var.name.2))) +
  geom_point(alpha = 1/5) +
  opts(aspect.ratio = 1) +
  facet_grid(. ~ name)
}

gr.sc("sum.All", "sum.Empl")
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误.为什么?

Error in get(var.name.1) : object 'var.name.1' …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

将列表转换为一行data.frame

我有一个这样的列表:

arg0 <- list(code = "a", n = rep(10, 3))
Run Code Online (Sandbox Code Playgroud)

列表中的对象数是可变的.列表的对象是向量 - 只有一维对象.

我想创建一个过程将列表转换为一行data.frame,如下所示:

> data.frame(code = "a", n.1 = 10, n.2 = 10, n.3 = 10)
  code n.1 n.2 n.3
1    a  10  10  10
Run Code Online (Sandbox Code Playgroud)

我目前有这个解决方案:

a <- stack(arg0)
b <- data.frame(t(a[,1]))
names(b) <- a[,2]
b <- data.frame(b)
Run Code Online (Sandbox Code Playgroud)

b几乎我想要实现的结果在哪里:

> b
  code  n n.1 n.2
1    a 10  10  10
Run Code Online (Sandbox Code Playgroud)

两个问题:

  1. 是否有更优雅的方式来实现结果?
  2. 你知道如何获得重复的同名的编号c(n.1, n.2, n.3)吗?

r list dataframe

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

具有data.table的组的变量加权和

我正在寻找一个解决方案,用data.table计算一些变量的加权和.我希望这个例子足够清楚.

require(data.table)

dt <- data.table(matrix(1:200, nrow = 10))
dt[, gr := c(rep(1,5), rep(2,5))]
dt[, w := 2]

# Error: object 'w' not found
dt[, lapply(.SD, function(x) sum(x * w)),
   .SDcols = paste0("V", 1:4)]

# Error: object 'w' not found
dt[, lapply(.SD * w, sum),
   .SDcols = paste0("V", 1:4)]

# This works with out groups
dt[, lapply(.SD, function(x) sum(x * dt$w)),
   .SDcols = paste0("V", 1:4)]

# It does not work by groups
dt[, lapply(.SD, function(x) sum(x * dt$w)),
   .SDcols = paste0("V", …
Run Code Online (Sandbox Code Playgroud)

aggregate r weighted data.table

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

install.packages 中出现错误:未安装软件包“RGtk2”,因为它不是为 UCRT 构建的

我尝试安装拨浪鼓和 RGtk2。我用了

\n
install.packages(\n  "https://cran.microsoft.com/snapshot/2021-12-15/bin/windows/contrib/4.1/RGtk2_2.20.36.2.zip",\n  repos = NULL\n)\n
Run Code Online (Sandbox Code Playgroud)\n

安装 RGtk2。

\n

然后我收到一条错误消息说

\n
Error in install.packages : package \xe2\x80\x98RGtk2\xe2\x80\x99 not installed because it is not built for UCRT\n
Run Code Online (Sandbox Code Playgroud)\n

我想知道如何解决这个问题?\n谢谢~

\n

r rattle

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

删除特定年份(日期)的行

我的数据集包含两列:

  1. 日期与Date类,所以不是字符串yyyy-mm-dd
  2. 一定的计数。

我想删除 2017 年的所有行。

df$date > "2016-12-31" (因此使用 > 符号)不断发出警告

“日期错误 > “2016-12-31”:比较 (6) 仅适用于原子和列表类型”

在我尝试过的很多很多方法中。似乎不能使用简单的“<”,即使这些是大多数在线解决方案。知道如何以另一种方式删除某一年的行吗?

r date rows

0
推荐指数
1
解决办法
2855
查看次数