문제

여기 R 초보자를 참아주십시오.튜토리얼에 포함된 .Rdata 파일을 대체하기 위해 내 데이터를 사용하여 멋진 Flowdata.com 사이트에 게시된 튜토리얼을 따라가려고 합니다.Rdata 파일 "unisexCnts.RData"에는 남녀 공용 이름과 다양한 연도에 사용된 횟수가 포함되어 있습니다.

head(unisexCnts)
        1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951
Addison    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
Alexis     0    0    0    0    0    0    0    0    0    0    0   12    0    0    0    0    0    0    0    0    0    0
Ali        0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
Alva       0    0  312  273  274  263    0  273    0  255  235  195  222    0  195    0  193  225  204  196  177  156
Amari      0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
Angel      0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
        1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973
Addison    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
Alexis     0    0    0    0    0    0    0    0    0    0    0    0  190    0    0  325    0    0    0    0    0    0
Ali        0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0  243  219  214
Alva     177  132  159  178  145  138  131  119  119  119  127   97  107   97   83   76   83   90   84   81   58   68
Amari      0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
Angel      0    0    0    0    0    0    0    0    0 1264    0    0    0    0    0    0    0 1579 2145 2488    0    0
        1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995
Addison    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0  595  664
Alexis     0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
Ali        0    0    0    0    0    0    0    0    0    0    0    0  561  565  556  643  747  722    0  742    0    0
Alva      54   57   53   54   59   40   62    0   48    0   28    0   34    0    0    0    0    0    0    0    0   26
Amari      0    0    0    0    0    0   11    0    0    0    0    0   16    0   22    0   32    0    0    0    0    0
Angel   2561 2690 2779    0    0 3004 3108 3113 3187 2924 3100 3341 3229 3101 3532 3889 4066 4520    0    0    0    0
        1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012
Addison  778  889    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
Alexis     0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
Ali        0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
Alva       0    0    0   19    0   14    0    0    0    0    0   24    0    0    0    0    0
Amari      0    0    0    0    0    0 1181 1397 1333 1299 1265 1550 1780    0    0    0    0
Angel      0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0

str() 함수를 통해 실행하면 다음과 같은 결과를 얻습니다.

str(unisexCnts)
 num [1:121, 1:83] 0 0 0 0 0 0 16 0 0 0 ...
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:121] "Addison" "Alexis" "Ali" "Alva" ...
  ..$ : chr [1:83] "1930" "1931" "1932" "1933" ...

내 데이터는 "boysnames.csv"라는 CSV 파일에 있습니다.

 ,2013,2012,2011,2010,2009,2008
    Jack,764,831,840,935,1068,1151
    James,746,773,796,746,711,737
    Daniel,678,683,711,792,842,828
    Conor,610,639,709,726,776,857

unisexCnts.RData를 boysnames.csv의 콘텐츠로 덮어쓰려고 합니다.그래서 내 CSV를 재구성하고 저장할 준비를 하기 위해 다음을 수행했습니다.

1 단계.

unisexCnts<-data <- read.csv("boysnames.csv", stringsAsFactors=FALSE, header=TRUE, check.names = FALSE)

2 단계.

unisexCnts<-as.matrix(unisexCnts)

3단계.

save(file="unisexCnts.RData")  ##save as Rdata file, overwriting the original unisexCnts.RData in the dir 

그러나 1단계와 2단계 후에 원본 구조와 일치하지 않는 다음과 같은 결과가 나타납니다. 어떤 아이디어/포인터가 있습니까?

> str(unisexCnts)
 chr [1:100, 1:7] "Jack" "James" "Daniel" "Conor" "Sean" "Adam" "Ryan" "Michael" "Harry" "Noah" ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:7] "" "2013" "2012" "2011" ...
도움이 되었습니까?

해결책

.csv 파일을로드 할 때 "row.names"명령을 사용하여 업로드 된 데이터의 행 이름이 될 열을 지정할 수 있습니다

i 데이터를 신속하게 재생하고 다음 코드를 사용하여 업로드했습니다.

read.csv('test.csv', stringsAsFactors = F,head = T, row.names = 1)
.

이렇게하면 데이터를 업로드 한 후이 작업을 수행해야합니다.이것은 당신이 찾고있는 데이터 구조를 제공합니다 :

unisexCnts = read.csv('test.csv', stringsAsFactors = F,head = T, row.names = 1)
unisexCnts = as.matrix(unisexCnts)
str(unisexCnts)
int [1:4, 1:6] 764 746 678 610 831 773 683 639 840 796 ...
- attr(*, "dimnames")=List of 2
 ..$ : chr [1:4] "Jack" "James" "Dan" "Conor"
 ..$ : chr [1:6] "X2013" "X2012" "X2011" "X2010" ...
.

다른 팁

그러나 원본의 구조, 아이디어/포인터의 구조와 일치하지 않는 단계 1 & 2 후에 다음을 얻습니다.

원본에서는 unisexCnts 이름은 행 이름으로 지정됩니다.그렇기 때문에 첫 번째 속성은 다음과 같습니다.

  ..$ : chr [1:121] "Addison" "Alexis" "Ali" "Alva" ...

귀하의 예에서 그것을 복제하려면.다음을 지정하여 이름을 행 이름으로 설정할 수 있습니다.

rownames(unisexCnts) <- ListorOrVectorofNamesHere

이렇게 하면 출력이 일치하게 됩니다.

이 줄의 이유는 다음과 같습니다.

 chr [1:100, 1:7] "Jack" "James" "Daniel" "Conor" "Sean" "Adam" "Ryan" "Michael" "Harry" "Noah" ...

이 줄과 일치하지 않습니다

 num [1:121, 1:83] 0 0 0 0 0 0 16 0 0 0 ...

는 ~와 마찬가지로.실제 행렬 자체에 이름이 포함되어 있습니다.행렬에서는 동일한 데이터만 가질 수 있습니다. 유형 .행렬(이름)에 문자 데이터를 포함하면 전체 행렬 자체가 문자/문자열로 변환됩니다.

요약하자면행렬에서 이름 벡터를 제거하고 이를 행 이름으로 사용합니다. str() 두 개체 중 하나가 일치합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top