微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将多行放入R中的一列

如何解决将多行放入R中的一列

我正在尝试对以下数据集进行时间序列分析:

Year     1771   1772   1773  1774   1775   1776  1777   1778  1779   1780

Number   101     82     66    35     31      7     20     92   154   125

Year     1781   1782   1783  1784   1785   1786  1787   1788  1789   1790

Number    85     68     38    23     10     24    83    132   131    118

Year     1791   1792   1793  1794   1795   1796  1797   1798  1799   1800

Number    90     67     60    47     41     21    16      6     4      7

Year     1801   1802   1803  1804   1805   1806  1807   1808  1809   1810

Number    14     34     45    43     48     42    28     10     8      2

Year     1811   1812   1813  1814   1815   1816  1817   1818  1819   1820

Number     0      1      5    12     14     35    46     41    30     24

Year     1821   1822   1823  1824   1825   1826  1827   1828  1829   1830

Number    16      7      4     2      8     17    36     50    62     67

Year     1831   1832   1833  1834   1835   1836  1837   1838  1839   1840

Number    71     48     28     8     13     57   122    138   103     86

Year     1841   1842   1843  1844   1845   1846  1847   1848  1849   1850

Number     63     37     24    11     15     40    62     98   124     96

Year     1851   1852   1853  1854   1855   1856  1857   1858  1859   1860

Number    66     64     54    39     21      7     4     23    55     94

Year     1861   1862   1863  1864   1865   1866  1867   1868  1869   1870

Number    96     77     59    44     47     30    16      7    37     74

我的问题是数据放置在多行中。我正在尝试从数据中创建两列。一年代表数字,一个代表数字,因此在R中易于阅读。

> library(tidyverse)
> sun.df = data.frame(sunspots)
> Year = filter(sun.df,sunspots == "Year")

可以隔离Year数据,并且可以使用,但是我不确定如何将其放在列中。

有什么建议吗?

解决方法

尝试一下:

library(tidyverse)

df <- read_csv("test.csv",col_names = FALSE)
df

# A tibble: 6 x 4
# X1        X2    X3    X4
# <chr>  <dbl> <dbl> <dbl>
# 1 Year     123   124   125
# 2 Number     1     2     3
# 3 Year     126   127   128
# 4 Number     4     5     6
# 5 Year     129   130   131
# 6 Number     7     8     9

# Removing first column and transpose it to get a dataframe of numbers
df_number <- as.data.frame(as.matrix(t(df[,-1])),row.names = FALSE)
df_number
#   V1 V2  V3 V4  V5 V6
# 1 123  1 126  4 129  7
# 2 124  2 127  5 130  8
# 3 125  3 128  6 131  9

# Keep the first two column (V1,V2) and assign column names
df_new <- df_number[1:2]
colnames(df_new) <- c("Year","Number")

# Iterate and rbind with subsequent columns (2 by 2) to df_new
for(i in 1:((ncol(df_number) - 2 )/2)) {
  df_mini <- df_number[(i*2+1):(i*2+2)]
  colnames(df_mini) <- c("Year","Number")
  df_new <- rbind(df_new,df_mini)
}
df_new
#    Year Number
# 1  123      1
# 2  124      2
# 3  125      3
# 4  126      4
# 5  127      5
# 6  128      6
# 7  129      7
# 8  130      8
# 9  131      9

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。