将向量导入到一个CSV单元格R中

问题描述

我有来自一系列时间序列的样本数据。我有一个电子表格,分别是每个开始年,每个结束年以及之间进行测量的年份。我想将它们绘制成带有显示测量年份的点的线段,但由于行之间测量年份的数量/模式不一致,所以我想不起来在R中的情况如何(有些是NA,因为第一次之间没有测量年份最后)。

目前,它们保存在excel的“ middle_years”列中,该列在excel单元格中的字面值为“ c(1990,1995,2000,2007)”。我很高兴更改这种格式,但是我不知道这里最有效的方法。导入这些的最佳方法是什么,以便可以在绘图上显示它们?

# sample data
test <- data.frame(
          category = c("a","a","b","c","c"),start_year = c(1920,1970,1980,1977,1950,1982),end_year = c(2019,2008,2010,2001,2010),middle_years = c("c(1945,1960,1988,2002)","c(1981,1995:1998,2004)",1999)",NA,"c(1970)",NA ))

# plot as segments,colored by category 
# but this is where I want to add sample dots on top of each line segment
test %>%
  arrange(start_year) %>%
  mutate(order = c(1:nrow(.)))%>%
  ggplot() +
  geom_segment(aes(x=start_year,xend=end_year,y=order,yend=order,color=category),size=3,lineend = "round")+
  theme_minimal()

我想我需要将原始的excel工作表从'c()'更改为仅以列分隔的年份,然后将逗号分隔的字符串导入,强制转换为新列,通过ID设置ivot_longer,然后进行过滤NA行。但是其中一些值类似于1950:2000,因此,如果有一种方法可以在不单独在Excel工作表中单独输入每年的情况下做到这一点,我肯定会更喜欢。

谢谢!

解决方法

好!我想通了。

我只用逗号列出了数字,而不是电子表格中的“ c()”。

所以我有以下数据:

# sample data
test <- data.frame(
          category = c("a","a","b","c","c"),start_year = c(1920,1970,1980,1977,1950,1982),end_year = c(2019,2008,2010,2001,2000,2010),middle_years = c("1945,1960,1988,2002","1981,1995,1996,1998,2004",1999",NA,"1970",NA ))

然后我使用splitstackshape::cSplit将这些列表强制为单独的列。


test %>%
  arrange(start.year) %>%
  mutate(order = c(1:nrow(.)))%>%

  # split each comma-separated string into n columns
  splitstackshape::cSplit('middle.years',sep=",") %>%

  # pivot these new columns into rows
  pivot_longer(cols = starts_with("middle.years"),names_to = "middle.year.order",values_to = "middle.year") %>%
  
  # slice so that you don't have a bunch of NAs.
  group_by(order,middle.year) %>%
  slice(1) %>%
  ungroup() %>%
  
  mutate(Category = as.character(Category)) %>%


  # plot
  ggplot()+
  geom_segment(aes(x=start.year,xend=end.year,y=order,yend=order,color=Category),size=3,lineend = "round")+
  geom_point(aes(y=order,x=middle.year),color="black")+
  theme_minimal()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...