小编Dan*_*nka的帖子

尝试设置"sep"/"dec"忽略:write.csv格式错误 - R.

有类似的帖子,但实际上没有一个是由这个错误引起的?

我想以这种.csv格式获取输入:separator";" 和十进制"."

Parameter;Intensitaet;Wert
se;1;0.027
se;1;0.024
se;1;0.021
se;1;0.018
se;1;0.015
se;1;0.012
Run Code Online (Sandbox Code Playgroud)

我得到的是:

Parameter;Intensitaet;Wert
se;2;0,0572
se;2;0,2
se;2;0,1
se;2;0,4
se;2;0,0795
Run Code Online (Sandbox Code Playgroud)

已尝试此代码的各种版本:

> write.csv(final, "SEmurgang.csv", row.names = F, quote = F, sep = ";")
Warning message:
In write.csv(final, "SEmurgang.csv", row.names = F, quote = F, sep = ";") :
  Versuch ignoriert 'sep' zu setzen

> write.csv2(final, "SEmurgang.csv", row.names = F, quote = F, dec=".")
Warning message:
In write.csv2(final, "SEmurgang.csv", row.names = F, quote = F,  :
  Versuch ignoriert 'dec' zu setzen
Run Code Online (Sandbox Code Playgroud)

但是我总是得到同样的错误.我该怎么办呢?

提前致谢!

csv r

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

将 R 中的 data.table 中的所有 NA 替换为 0

我有一个data.table有很多列的。有 4 列我想NA用 0 替换。

我有一个可行的解决方案:

  claimsMonthly[is.na(claim9month),claim9month := 0
          ][is.na(claim10month),claim10month := 0
            ][is.na(claim11month),claim11month := 0
              ][is.na(claim12month),claim12month := 0]
Run Code Online (Sandbox Code Playgroud)

然而,这是相当重复的,我想通过使用循环来减少这种情况(但不确定这是否是最聪明的想法?):

  for (i in 9:12){
    claimsMonthly[is.na(paste0("claim", i, "month")), paste0("claim", i, "month") := 0]
  }
Run Code Online (Sandbox Code Playgroud)

当我运行这个循环时,什么也没有发生。我猜是因为约定的回报paste0()"claim12month"所以我得到了in.na("claim12month")。其结果是FALSE尽管我的数据中有这样的事实NA。我想这与引用有关?

这不是我第一次遇到使用paste0()或运行循环的问题data.table,所以我一定在这里遗漏了一些重要的东西。

任何想法如何解决这一问题?

loops r data.table

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

将多个.csv文件合并为一个

我知道这个问题已经被问过多次了,但是尽管尝试应用上述解决方案,但我还是无法解决我的小问题:

我已经保存了所有要合并到一个文件夹中的.csv文件:

> file_list <- list.files()
> file_list[]
[1] "SR-einfam.csv"           "SR-garage.csv"           "SR-hotel.csv"           
[4] "SR-IndustrieGewerbe.csv" "SR-mehrfam.csv"          "SR-OffG.csv"  
Run Code Online (Sandbox Code Playgroud)

我使用do.calltio将它们全部合并。请注意,所有文件都具有相同的格式。

sr.master <- do.call("rbind", lapply(file_list, read.csv,  sep = ";", header = TRUE)) 
names(sr.master)
str(sr.master)
Run Code Online (Sandbox Code Playgroud)

但是,在检查完生成的文件后,我意识到只有第一个文件已导入。是什么导致此问题?

> str(sr.master)
'data.frame':   1941 obs. of  8 variables:
 $ Berechnung: Factor w/ 51 levels "Berechnung 1",..: 51 1 12 23 34 45 47 48 49 50 ...
 $ Situation : Factor w/ 13 levels "Nach Massnahme 0",..: 6 6 6 6 6 6 6 6 6 …
Run Code Online (Sandbox Code Playgroud)

csv r rbind do.call read.csv

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

计算R中data.table中每组计数变量的比例

我有以下数据:

dput(mydata)
structure(list(groupSize = structure(c(2L, 1L, 2L, 1L, 4L, 4L, 
3L, 3L, 2L, 2L, 1L, 1L, 3L, 3L, 4L, 4L, 2L, 2L, 1L, 1L, 3L, 3L, 
4L, 4L, 3L, 3L, 2L, 2L, 1L, 1L, 4L, 4L, 2L, 2L, 4L, 4L, 3L, 3L, 
1L, 1L), .Label = c("small", "intermediate", "large", "huge"), class = "factor"), 
    gender = structure(c(1L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 
    2L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 
    1L, …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

检测 R 中的空列表

我正在计算存储在列表中的一些值,并将该列表附加到一个名为 的现有列表中results。在某些情况下,计算会返回TRUETRUE在这种情况下,我想删除从列表返回的元素:

my_list
$`0`
[1] TRUE

$`1`
[1] TRUE


my_list = lapply(list(my_list), function(x){Filter(Negate(isTRUE), x)})
> my_list
[[1]]
named list()
Run Code Online (Sandbox Code Playgroud)

这将返回一个空列表。现在我想检查一下:

  • 如果列表为空 - 不执行任何操作
  • 如果列表不为空,则将其附加到结果中

问题是当我检查时

length(my_list) >0
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

如何检测列表是否为空?

r list string-length

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

Rstudio - 在源窗口中进行多次替换的键盘快捷键

我知道可以在 R 中同时替换多个项目。我有以下命令序列:

在此输入图像描述

如何仅使用键盘修改框中的所有项目?我知道查找功能和键盘快捷键帮助,但这不是我要找的。

也许有人可以建议对类似技巧和快捷方式进行很好的总结?我在 youtube 上简单浏览了一下,没有令人满意的发现。

keyboard-shortcuts r rstudio

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

data.table - 汇总数据 - `by` 和 `keyby` 之间的区别?

我注意到以下两个命令产生非常不同的结果,所以我想知道有什么区别?

TestData <- TestData[, keyby = c("group","date"), 
                             .(totalCount = sum(count))]

TestData <- TestData[, by = c("group","date"), 
                             .(totalCount = sum(count))]
Run Code Online (Sandbox Code Playgroud)

根据备忘单:

dt[, j, by = .(a)] – 按指定列中的值对行进行分组。

dt[, j, keyby = .(a)] – 按指定列中的值对行进行分组和同时排序。

r data.table

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

在 R 中创建包含总计的双向表

我想知道是否有一种简单的方法来创建一个包含列和行总计的表?

smoke <- matrix(c(51,43,22,92,28,21,68,22,9),ncol=3,byrow=TRUE)
    colnames(smoke) <- c("High","Low","Middle")
    rownames(smoke) <- c("current","former","never")
    smoke <- as.table(smoke)
Run Code Online (Sandbox Code Playgroud)

我认为这会非常简单,但到目前为止我发现的解决方案似乎相当复杂,涉及lapplyrbind。然而,这似乎是一个微不足道的任务,一定有一些更简单的方法吗?

预期结果:

> smoke
        High Low Middle TOTAL
current   51  43     22   116
former    92  28     21   141
never     68  22      9    99
TOTAL    211  93     52    51
Run Code Online (Sandbox Code Playgroud)

r dataframe data.table

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

尽管 fo 在 R 中为 TRUE,但 is.null 仍返回 false

我有一个变量:

x$value
[[1]]
NULL
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时,is.null(x$value)我得到:

is.null(x$value)
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

这怎么可能?我怎样才能解决这个问题?我在sum(sapply((data$iteration), FUN = function(x) {ifelse(is.null(x$value), 0, x$value)}), na.rm = TRUE)一个错误中使用它:

Error in sum(sapply((data$iteration), FUN = function(x) { : 
  invalid 'type' (list) of argument
Run Code Online (Sandbox Code Playgroud)

null r lapply sapply

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