在R中,将以下数据分成具有2列的表的最佳方法是什么?
2018年3月9日
0.084752
2018年3月10日
0.084622
2018年3月11日
0.084622
2018年3月12日
0.084437
2018年3月13日
0.084785
2018年3月14日
0.084901
我考虑使用for循环,但建议不要使用它。我不知道如何解析事情,所以如果最好的方法请涉及这个过程 尽可能清楚。
决赛桌应该是这样的:
https://i.stack.imgur.com/u5hII.png
谢谢!
答案 0 :(得分:2)
输入:
input <- c("March 09, 2018",
"0.084752",
"March 10, 2018",
"0.084622",
"March 11, 2018",
"0.084622",
"March 12, 2018",
"0.084437",
"March 13, 2018",
"0.084785",
"March 14, 2018",
"0.084901")
方法:
library(dplyr)
library(lubridate)
df <- matrix(input, ncol = 2, byrow = TRUE) %>%
as_tibble() %>%
mutate(V1 = mdy(V1), V2 = as.numeric(V2))
输出:
df
# A tibble: 6 x 2
V1 V2
<date> <dbl>
1 2018-03-09 0.0848
2 2018-03-10 0.0846
3 2018-03-11 0.0846
4 2018-03-12 0.0844
5 2018-03-13 0.0848
6 2018-03-14 0.0849
使用names()
或rename()
重命名每列。
names(df) <- c("Date", "Value")
答案 1 :(得分:1)
data.table::fread
可以读取&#34; ...一个字符串(至少包含一个\ n)....&#34;
&#39; F&#39; fread
代表快速&#39;所以下面的代码也适用于相当大的块。
require(data.table)
x = 'March 09, 2018
0.084752
March 10, 2018
0.084622
March 11, 2018
0.084622
March 12, 2018
0.084437
March 13, 2018
0.084785
March 14, 2018
0.084901'
o = fread(x, sep = '\n', header = FALSE)
o[, V1L := shift(V1, type = "lead")]
o[, keep := (1:.N)%% 2 != 0 ]
z = o[(keep)]
z[, keep := NULL]
z
答案 2 :(得分:0)
result = data.frame(matrix(input, ncol = 2, byrow = T), stringsAsFactors = FALSE)
result
# X1 X2
# 1 March 09, 2018 0.084752
# 2 March 10, 2018 0.084622
# 3 March 11, 2018 0.084622
# 4 March 12, 2018 0.084437
# 5 March 13, 2018 0.084785
# 6 March 14, 2018 0.084901
接下来你应该调整名称和类,如下所示:
names(result) = c("date", "value")
result$value = as.numeric(result$value)
# etc.
使用Nik的不错输入:
input = c(
"March 09, 2018",
"0.084752",
"March 10, 2018",
"0.084622",
"March 11, 2018",
"0.084622",
"March 12, 2018",
"0.084437",
"March 13, 2018",
"0.084785",
"March 14, 2018",
"0.084901"
)