R使用相对位置从其他列计算新列值。为什么结果列的类=data.frame?
每天我都运行summary report以获取导入的文件列表,并在特定项目输出中使用这些文件。每天的日志都印有当天的日期(log.date),并被读取到运行日志文件中 我想为这个日志创建一个检查,让我知道从一天到下一天都在读取相同数量的历史文件。(即,今天的导入应等于昨天的导入,再加上今天的一些新文件。) 日志示例:R使用相对位置从其他列计算新列值。为什么结果列的类=data.frame?,r,R,每天我都运行summary report以获取导入的文件列表,并在特定项目输出中使用这些文件。每天的日志都印有当天的日期(log.date),并被读取到运行日志文件中 我想为这个日志创建一个检查,让我知道从一天到下一天都在读取相同数量的历史文件。(即,今天的导入应等于昨天的导入,再加上今天的一些新文件。) 日志示例: fileLog <- data.frame('Log.Date'=c('2020-08-01','2020-08-01','2020-08-02','2020-08-02',
fileLog <- data.frame('Log.Date'=c('2020-08-01','2020-08-01','2020-08-02','2020-08-02','2020-08-02','2020-08-03','2020-08-03','2020-08-03','2020-08-03'),
'System' = c('A','B','A','B','C','A','B','C','D'),
'File'=c('file1','file2','file1','file2','file3', 'file1', 'file2','file3','file4'))
# Log.Date System File
# 1 2020-08-01 A file1
# 2 2020-08-01 B file2
# 3 2020-08-02 A file1
# 4 2020-08-02 B file2
# 5 2020-08-02 C file3
# 6 2020-08-03 A file1
# 7 2020-08-03 B file2
# 8 2020-08-03 C file3
# 9 2020-08-03 D file4
使用绝对列名可以很好地工作:
mutate(Change = fileLog$'2020-08-03' - fileLog$'2020-08-02')
我尝试过调用位置的其他迭代,这解决了同样的问题
mutate(Change = fileLog[,ncol(fileLog)] - fileLog[,ncol(fileLog)-1])
我还尝试将列强制为数字,但给出了错误:“list”对象不能强制为类型“double”
mutate(Change = as.numeric(check_start[,-1]) - as.numeric(check_start[,-2]))
mutate(Change = as.numeric(rev(check_start)[1]) - as.numeric(rev(check_start)[2]))
问题:是否有人可以建议正确的方法来进行此位置计算,以输出一个不属于class=data.frame的“Change”列?对上一步进行一些更改:
n\u distinct
pivot\u wide
之后添加另一个replace
步骤,而是使用values\u fill
应该是双括号的
[[ncol(.)]
等吗?是的,你是对的<代码>[仍然将其保留为数据帧。这当然会立即清除它。非常感谢!!考虑是否可以在长格式中执行此操作也可能有价值。使用lag
或diff
或类似函数可以轻松处理日常更改,您可以在组内使用groupby
同样,这个来自前十年的古老问题可能有助于理解与[
,[[
,$
等的所有索引差异-谢谢!我会研究一下滞后和差异,因为我可以看出这在哪里是有用的。否则,关于[,[,$的帖子非常有用。
mutate(Change = fileLog[,ncol(fileLog)] - fileLog[,ncol(fileLog)-1])
mutate(Change = as.numeric(check_start[,-1]) - as.numeric(check_start[,-2]))
mutate(Change = as.numeric(rev(check_start)[1]) - as.numeric(rev(check_start)[2]))
fileLog <- fileLog %>%
arrange(Log.Date) %>%
group_by(Log.Date, System) %>%
summarise(File.Count = n_distinct(File)) %>%
ungroup() %>%
pivot_wider(names_from = Log.Date, values_from = File.Count, values_fill = 0)
fileLog <- fileLog %>% mutate(Change = .[[ncol(.)]] - .[[ncol(.) - 1]])
fileLog
# A tibble: 4 x 5
System `2020-08-01` `2020-08-02` `2020-08-03` Change
<chr> <int> <int> <int> <int>
1 A 1 1 1 0
2 B 1 1 1 0
3 C 0 1 1 0
4 D 0 0 1 1