필터 지우기
필터 지우기

Replacing Data by variable name

조회 수: 1 (최근 30일)
Neesha
Neesha 2014년 6월 12일
댓글: Azzi Abdelmalek 2014년 6월 13일
Hi All
I have two data set as below
A =
Name subName Type Output Q1 Q2 Q3 Q4
x y xy Person 3 4 5 6
a b ab Animal 2 3 4 5
m n mn Bird 1 2 3 4
s t st None 9 9 9 9
x y NA All 1 1 1 1
B =
Name subName Type Output Q2 Q3
x y xy Person -1 -1
m n mn Bird -2 -2
and I want to replace A's value for given qtrs in B repalced with A so that my new set is
C =
Name subName Type Output Q1 Q2 Q3 Q4
x y xy Person 3 -1 -1 6
a b ab Animal 2 3 4 5
m n mn Bird 1 -2 -2 4
s t st None 9 9 9 9
x y NA All 1 1 1 1
I tried using replacedata with variable names but it gives me error.
I am using Matlab 2013b
  댓글 수: 3
Azzi Abdelmalek
Azzi Abdelmalek 2014년 6월 12일
편집: Azzi Abdelmalek 2014년 6월 12일
What are the classes of your data, cell or dataset?
Neesha
Neesha 2014년 6월 12일
Dataset

댓글을 달려면 로그인하십시오.

채택된 답변

Azzi Abdelmalek
Azzi Abdelmalek 2014년 6월 13일
If your array is not a cell array, use dataset2cell to convert it
a={ 'Name' 'subName' 'Type' 'Output' 'Q1' 'Q2' 'Q3' 'Q4'
'x' 'y' 'xy' 'Person' [ 3] [ 4] [ 5] [ 6]
'a' 'b' 'ab' 'Animal' [ 2] [ 3] [ 4] [ 5]
'm' 'n' 'mn' 'Bird' [ 1] [ 2] [ 3] [ 4]
's' 't' 'st' 'None' [ 9] [ 9] [ 9] [ 9]
'x' 'y' 'NA' 'All' [ 1] [ 1] [ 1] [ 1]}
b={'Name' 'subName' 'Type' 'Output' 'Q2' 'Q3'
'x' 'y' 'xy' 'Person' [-1] [-1]
'm' 'n' 'mn' 'Bird' [-2] [-2]}
name1=a(1,5:end)
name2=b(1,5:end)
text_a=a(2:end,1:4)
text_b=b(2:end,1:4)
idx_text=find(all(ismember(text_a,text_b),2))+1
idx_names=find(ismember(name1,name2))+4
c=a
c(idx_text,idx_names)=b(2:end,5:end)
  댓글 수: 1
Azzi Abdelmalek
Azzi Abdelmalek 2014년 6월 13일
Neesha commented
Thanks a lot

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Image Analyst
Image Analyst 2014년 6월 12일
Do you have R2013b or later? If so, just use a table.
  댓글 수: 4
Image Analyst
Image Analyst 2014년 6월 12일
Did you use
tableA = readtable(ExcelFileName);
to read the Excel file into a table (a wonderful new data type started with R2013b)? Please attach the workbook if you want people to try things.
First you need to identify which rows need to get replaced. You do that with ismember(). Then it's straightforward and I think would go something like this ( very untested and just off the top of my head )
for currentRow = 1 : length(tableB.Q2)
% Find rows in A that need to be replaced.
rowsToReplace = ismember(tableB.name(currentRow), tableA.name);
% Replace all the rows in A that need replacing with the value from B.
for rowsInA = find(rowsToReplace)
tableA.Q2(rowsInA) = tableB.Q2(currentRow);
tableA.Q3(rowsInA) = tableB.Q3(currentRow);
end
end
You should also check subname.
Neesha
Neesha 2014년 6월 12일
ok, i will make sure to attach file next time.
Here is the thing, my A and B are internal to code and not in the file. Those are output from a function. So i am trying to figure to convert them into table

댓글을 달려면 로그인하십시오.

태그

아직 태그를 입력하지 않았습니다.

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by